1 建議new,delete,而不是malloc,free
2 new要判斷返回值,經常成功不代表一定成功
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,在自由存儲區分配一個sizeof(A)大小的內存空間;然后調用構造函數A()。,在這塊內存空間上類磚砌瓦,建造起我們的對象。同樣對于
delete,則做了相反的兩件事:調用析構函數~A(),銷毀對象,調用operator delete,釋放內存。
運算符new和delete提供了存儲的動態分配和釋放功能。它的作用相當于C語言的函數malloc()和free(),但是性能更為優越。使用new比使用malloc()有以下的幾個優點:
1、new自動計算要分配類型的大小,不使用sizeof運算符,比較省事,可以避免錯誤。
2、它自動地返回正確的指針類型,不用進行強制指針類型轉換。
3、可以用new對分配的對象進行初始化。
不過需要注意的是,new分配一塊內存的時候,并沒有對這塊內存空間做清零等任何動作,delete同樣。