C++析構函數


析構函數是構造函數的互補:當對象超出作用域或動態分配的對象被刪除時,將自動調用析構函數。
析構函數可用於釋放對象時構造或在對象的生命期中所獲取的資源。
不管類是否定義了自己的析構函數,編譯器都自動執行類中非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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM