Code Committee專家會關注內存分配的使用:
1 建議new,delete,而不是malloc,free
2 new要判斷返回值,,經(jīng)常成功不代表一定成功
3 delete指針后盡量賦值NULL
我們先看一下下面的這段程序,,有這么一個程序段:
class A
{
public:
A() { cout<<"A is here!"<<endl; }
~A(){ cout<<"A is dead!"<<endl; }
private:
int i;
};
A* pA=new A;
delete pA;
實際上,這段程序里面隱含調用了一些我們沒有看到的東西,, 在這個簡單的程序段里面,,new/delete究竟做了些什么?那就是:
static void* operator new(size_t sz);
static void operator delete(void* p);
這就是new可以申請很多種類型變量空間的原因,。
new A;實際上做了2件事:調用opeator new,,在自由存儲區(qū)分配一個sizeof(A)大小的內存空間;然后調用構造函數(shù)A(),。,,在這塊內存空間上類磚砌瓦,建造起我們的對象,。同樣對于delete,,則做了相反的兩件事:調用析構函數(shù)~A(),銷毀對象,,調用operator delete,,釋放內存。
運算符new和delete提供了存儲的動態(tài)分配和釋放功能,。它的作用相當于C語言的函數(shù)malloc()和free(),,但是性能更為優(yōu)越。使用new比使用malloc()有以下的幾個優(yōu)點:
1,、new自動計算要分配類型的大小,,不使用sizeof運算符,比較省事,,可以避免錯誤,。
2、它自動地返回正確的指針類型,,不用進行強制指針類型轉換,。
3、可以用new對分配的對象進行初始化,。
不過需要注意的是,,new分配一塊內存的時候,,并沒有對這塊內存空間做清零等任何動作,delete同樣,。