C++中,new/delete和malloc/free的區別


1、new/delete是C++的操作符,而malloc/free是C中的函數。

2、new做兩件事,一是分配內存,二是調用類的構造函數;同樣,delete會調用類的析構函數和釋放內存。而malloc和free只是分配和釋放內存。

3、new建立的是一個對象,而malloc分配的是一塊內存;new建立的對象可以用成員函數訪問,不要直接訪問它的地址空間;malloc分配的是一塊內存區域,用指針訪問,可以在里面移動指針;new出來的指針是帶有類型信息的,而malloc返回的是void指針。

4、new/delete是保留字,不需要頭文件支持;malloc/free需要頭文件庫函數支持。

我們看一看malloc/free和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 *a = (Obj*)malloc(sizeof(obj));
    a->Intialize();
    // ...
    a->Destroy();
    free(a);
}

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

類Obj的函數Initialize模擬了構造函數的功能,函數Destroy模擬了析構函數的功能。函數UseMallocFree中,由於malloc/free不能執行構造函數與析構函數,必須調用成員函數Initialize和Destroy來完成初始化與清除工作。函數UseNewDelete則簡單得多。

這只是個例子,不會有人用malloc/free來創建類對象。另外,new和delete配套使用,new[]和delete[]配套使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM