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

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

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

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

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

咱們看一看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則簡單得多。blog

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

相關文章
相關標籤/搜索