析構函數是構造函數的互補:當對象超出作用域或動態分配的對象被刪除時,將自動調用析構函數。
析構函數可用於釋放對象時構造或在對象的生命期中所獲取的資源。
不管類是否定義了自己的析構函數,編譯器都自動執行類中非static 數據成員的析構函數。
1、析構函數的特點
(1)、析構函數沒有返回值和參數列表
(2)、析構函數不能重載
(3)、析構函數由系統自動調用,不能顯式調用
(4)、析構函數可以是inline函數
(5)、析構函數應該設置為類的公有成員
(6)、每個類有應該有一個析構函數,如果沒有顯式定義,那么系統會自動生成一個默認的析構函數
#include <iostream> using namespace std; class ExampleA { public: ~ExampleA(){cout << "ExampleA::Deconstructor" << endl;} }; class ExampleB { public: ~ExampleB(); }; ExampleB::~ExampleB() { cout << "ExampleB::Deconstructor" << endl; } int main(void) { ExampleA a; ExampleB b; return 0; }
2、析構函數的調用順序
http://www.cnblogs.com/LubinLew/p/Cpp-CallOrderOfConstructorAndDeconstructor.html
3、虛析構函數的作用
作用是當用一個基類的指針刪除一個派生類的對象時,派生類的析構函數會被調用,
總而言之,就是在實現多態的時候不造成內存泄露。
當然,並不是要把所有類的析構函數都寫成虛函數。因為當類里面有虛函數的時候,
編譯器會給類添加一個虛函數表,里面來存放虛函數指針,這樣就會增加類的存儲空間。所
以,只有當一個類被用來作為基類的時候,才把析構函數寫成虛函數。
http://blog.csdn.net/starlee/article/details/619827