1. 程式人生 > >C++內存分配new和malloc的區別

C++內存分配new和malloc的區別

href 構造函數 alloc 拋出異常 delete 錯誤 malloc all oid

這裏有一篇講的很詳細new和malloc的區別

總結一下:

1.new/delete是操作符,malloc/free是函數

2.malloc分配內存需指定大小,且只能是一般數據類型,分配成功返回void*,需要強制類型轉換,分配失敗返回NULL,需手動檢查是否分配成功;new分配內存無需指定大小,可以為類對象,分配成功返回特定類型指針,分配失敗拋出異常。

3.new分配內存,一般類型可以指定初始化,未初始化的保留其在內存中的原值;對象會調用其默認構造函數,也可以指定構造函數。

4.delete對象的指針時會調用其析構函數,而free則無法調用;delete指針之後一般還保留其原來的內存地址,再次使用出錯,所以delete完之後需要賦值為NULL。

5.C++保留malloc的原因是C++有時需要使用C編寫的庫,而C中只能使用malloc,如果使用new會出現錯誤。

C++內存分配new和malloc的區別