天天看點

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如何實作對象的動态記憶體管理,見示例。

C++中,new/delete和malloc/free的差別
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;
}      
C++中,new/delete和malloc/free的差別

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

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

繼續閱讀