概述
1. new是C++提供的一個用於內存分配的運算符,而malloc是C語言提供的一個用於內存分配的庫函數。
2. new運算符可以自動計算出所需內存空間占用的字節大小,無需用戶手動計算,而malloc需要用戶提供需要的字節數
3. new運算符返回的是指定類型的指針,而malloc庫函數返回的是void *類型的指針,需要用戶使用強制類型轉換手動轉換
4. new運算符所做的工作比malloc更多,new的底層實現實現是計算出所需要內存的字節大小,然后調用operator new庫函數,而operator new庫函數底層實際調用的是malloc庫函數,完成內存分配后,如果是一個類,還會調用該類的相應的構造函數,即new運算符可以完成內存分配和初始化的操作。
5. operator new的原型是void * operator new (size_t size)
其中返回值的類型為void *
不能隨意更改為int *
等,同時第一個參數必須是size_t
類型,否則就會報錯,可以在第一個參數后增加其他參數
6. 從5中可以看出,operator new
運算符返回的是void *
類型的指針,因此將void *
類型的指針轉為特定類型的指針是由new運算符完成的
7. new分配的內存需要使用delete運算符進行釋放,而malloc分配的內存則需要使用free庫函數進行釋放