• <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 閱讀(805) 評論(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必須配對使用。

            久久精品国产精品亚洲毛片| 一级做a爰片久久毛片看看| 伊人热热久久原色播放www| 伊人久久综在合线亚洲2019| 精品永久久福利一区二区| 亚洲精品高清国产一线久久| 欧美亚洲国产精品久久| 亚洲国产成人精品91久久久| 国产一区二区精品久久| 国产亚洲美女精品久久久久狼| 久久综合狠狠综合久久| 亚洲国产精品无码久久98| 狠狠色综合网站久久久久久久高清 | 精品国产青草久久久久福利 | 国产99久久久久久免费看| 精品久久久久久综合日本| 国产精品18久久久久久vr| 久久99国产精一区二区三区| 久久综合综合久久综合| www.久久热.com| 色综合久久久久| 久久精品成人一区二区三区| 久久久久亚洲精品无码网址| 欧美亚洲国产精品久久| 77777亚洲午夜久久多人| 久久不见久久见免费视频7| 狠狠色丁香久久综合五月| 久久AAAA片一区二区| 亚洲精品午夜国产va久久| 久久久久久久精品成人热色戒| 无码伊人66久久大杳蕉网站谷歌| 日韩精品久久久久久免费| 久久中文字幕一区二区| 久久精品成人欧美大片| 久久久这里有精品| 午夜精品久久久久久毛片| 99久久精品国产一区二区蜜芽| 欧美午夜A∨大片久久| 少妇高潮惨叫久久久久久| 99久久精品免费| 亚洲国产精品无码久久98|