Private: int* m_pAge;
Public:Cperson(){m_pAge =new int(100);}
new 或者 malloc後需要手動刪除所使用空間,由此引入析構函數.
析構函數:回收對象在堆區分配的空間,類中有new就會有析構函數.對象生命週期結束,會自動調用析構函數.
析構:對象生命週期結束時,回收空間.其中對象包括:
① 部對象:生命週期是當前作用域結束.
② 全局對象:生命週期是程序結束.
③ 指針對象: CPerson* p=new CPerson;//new 堆區的生命週期,遇到delete時結束
④ 臨時對象:CPerson(); //生命週期就是當前這一行
當函數返回對象時,會使用臨時對象,如下所示:
CPerson QQ() { CPerson ps; Return ps;}
Int main(){
CPerson ps1;
ps1=QQ();
}
分析:在QQ()函數中,由於ps爲局部對象,當return時會自動調用析構函數,將ps刪除掉,爲了防止該情況發生,所以引入了臨時對象。
上述代碼的輸出結果爲:構造函數、構造函數、析構函數、析構函數、析構函數。
注意:new和delete創建、刪除對象時會觸發構造函數和析構函數。
但malloc時需要自己手動添加構造和析構函數,它自己不會自動調用。