• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            malloc/free與new/delete的區別

            Posted on 2008-08-22 09:06 阿呆@Rachel 閱讀(803) 評論(0)  編輯 收藏 引用 所屬分類: C++

            由于編程的習慣,動態管理內存的時候總是用new/delete,malloc/free很少使用,兩者之間的區別就不是很清楚了。

            1. 本質區別
            malloc/free是C/C++語言的標準庫函數,new/delete是C++的運算符。
            對于用戶自定義的對象而言,用maloc/free無法滿足動態管理對象的要求。對象在創建的同時要自動執行構造函數,對象在消亡之前要自動執行析構函數。由于malloc/free是庫函數而不是運算符,不在編譯器控制權限之內,不能夠把執行構造函數和析構函數的任務強加于malloc/free。因此C++需要一個能完成動態內存分配和初始化工作的運算符new,以及一個能完成清理與釋放內存工作的運算符delete。

            class Obj
            {
            public :
                  Obj(
            ) { cout << “Initialization” << endl; }
                  
            ~Obj() { cout << “Destroy” << endl; }
                  
            void Initialize() { cout << “Initialization” << endl; }
                 
            void Destroy() { cout << “Destroy” << endl; }
            };

            void UseMallocFree()
            {
                  Obj  
            *= (obj *) malloc( sizeof( obj ) );     // allocate memory
                  a->Initialize();                                                // initialization
                  
            //
                  a->Destroy();                                                // deconstruction
                  free(a);                                                           // release memory
            }

            void UseNewDelete(void)
            {
                Obj  
            *= new Obj;                                         
                
            //
                delete a;
            }


            類Obj的函數Initialize實現了構造函數的功能,函數Destroy實現了析構函數的功能。函數UseMallocFree中,由于malloc/free不能執行構造函數與析構函數,必須調用成員函數Initialize和Destroy來完成“構造”與“析構”。所以我們不要用malloc/free來完成動態對象的內存管理,應該用new/delete。由于內部數據類型的“對象”沒有構造與析構的過程,對它們而言malloc/free和new/delete是等價的。

            2. 聯系
            既然new/delete的功能完全覆蓋了malloc/free,為什么C++還保留malloc/free呢?因為C++程序經常要調用C函數,而C程序只能用malloc/free管理動態內存。如果用free釋放“new創建的動態對象”,那么該對象因無法執行析構函數而可能導致程序出錯。如果用delete釋放“malloc申請的動態內存”,理論上講程序不會出錯,但是該程序的可讀性很差。所以new/delete,malloc/free必須配對使用。

            久久国产亚洲高清观看| 久久国产精品免费| 久久精品九九亚洲精品| 国产精品国色综合久久| 国产精品欧美亚洲韩国日本久久| 精品久久久久一区二区三区 | 久久九九免费高清视频| 日韩va亚洲va欧美va久久| 亚洲综合伊人久久综合| 欧美777精品久久久久网| 久久精品不卡| 久久精品无码专区免费东京热| 香蕉久久夜色精品国产小说| 国产精品成人久久久| 久久青青草原综合伊人| 久久久久久精品无码人妻| 93精91精品国产综合久久香蕉| 日韩久久久久久中文人妻| 久久综合久久性久99毛片| 久久久精品一区二区三区| 久久久亚洲AV波多野结衣| 久久免费视频一区| 色综合久久久久网| 久久久久无码精品国产| 伊人久久综合成人网| 中文字幕无码av激情不卡久久| 国产午夜精品久久久久九九电影 | www.久久热.com| 国产亚洲美女精品久久久2020| 久久97久久97精品免视看秋霞| 久久精品人人槡人妻人人玩AV| 亚洲色欲久久久综合网| 久久午夜免费视频| 久久频这里精品99香蕉久| 美女久久久久久| 人妻少妇精品久久| 亚洲国产综合久久天堂| 狠狠综合久久综合88亚洲| 无码国内精品久久综合88| 人妻无码αv中文字幕久久琪琪布| 久久影视综合亚洲|