C++學習筆記:New和Delete

C++學習筆記:New和Delete

C語言操作內存的方式

 下面是一段典型的內存分配方式:
 
    MyType *pType = (MyType *)malloc(sizeof(MyType));
    if (pType == NULL) error;
    Initialize(&MyType);
 
在以上的處理中,涉及到了四個環節:
1. 使用sizeof指定內存大小;
2. malloc返回的值是void* 類型,需要進行類型轉換;
3. 需要檢查是否分配成功;
4. 需要對分配的內存進行初始化;
 

C++ 的處理方式

C語言內存分配時需要注意的東西太多,容易出錯。C++在可用性、安全性方面進行了改進。C++使用 new/delete 進行內存的分配、釋放。典型的應用方式如下:
 
    MyType *pType = new MyType
 
從形式上看,比C語言簡介了不少。
New操作完成兩件事:1) 根據類型信息分配內存;2) 調用類的constructor函數完成初始化。
C++ 中不需要顯式的指示內存的大小,也不需要顯式的執行初始化操作。這方便了代碼的編寫,也減小了出錯的可能性。
 

使用new/delete的注意事項

1) 避免對void* 類型指針執行delete操作。由於void* 沒有類型信息,執行delete操作時只能釋放內存,不會調用deconstructor函數。
2)數組的操作:
MyType *pType = new MyType[100];
Delete []pType;
如果使用 "delete ptype"也可以正確釋放內存,但是隻會調用數組中第0個成員的deconstructor。3) new/delete 可以重載,可以定義在global範圍,或class中;
4) 參數的傳入: new(23) int;
5) placement new的使用,可以通過將內存的地址傳入在制定的內存上創建對象;例如:
void *p = malloc(sizeof(CA));
CA *pA = new(p) CA;
pA->~CA(); // notice: only object is destroyed, memory is kept;
free(p);
6) Delete可以刪除0;
7) 類的內存管理成員函數隱含是靜態的;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章