1、new和delete的作用
- new / new[]:完成兩件事,先底層調用 malloc 分配內存,然後調用構造函數(創建對象)。
- delete/delete[]:也完成兩件事,先調用析構函數(清理資源),然後底層調用 free 釋放空間。
- new 在申請內存時會自動計算所需字節數,而 malloc 則需我們自己輸入申請內存空間的字節數。
2、new和malloc的區別
- new是運算符,malloc()是一個庫函數;
- new會調用構造函數,malloc不會;
- new返回指定類型指針,malloc返回void*指針,需要強制類型轉換;
- new會自動計算需分配的空間,malloc不行;
- new可以被重載,malloc不能。
3、malloc/free、new/delete使用要點
malloc/free使用要點:
- malloc默認返回類型是void*,需要進行強制類型轉換;
- malloc內部是字節數,需要用sizeof計算字節數。
new/delete使用要點:
- new創建對象時完成了初始化;
- new創建對象數組,只能使用對象的無參構造函數;
- delete釋放對象數組時,不要丟了[],delete []p。
4、C++中有了malloc / free , 爲什麼還需要 new / delete?