什麼時候將析構函數聲明爲私有?

參考:https://blog.csdn.net/HITXuQin/article/details/12850755函數

當咱們將析構函數聲明爲私有時,就意味着析構函數只能在類域中被調用,沒法被外界(包括本身的對象)調用。  表現爲:this

1. 禁止用戶對此類型的變量進行定義,即禁止在棧內存空間內建立此類型的對象。要建立對象,只能用 new 在堆上進行。spa

2. 禁止用戶在程序中使用 delete 刪除此類型對象。對象的刪除只能在類內實現,也就是說只有類的實現者纔有可能實現對對象的 delete,用戶不能隨便刪除對象。.net

若是用戶想刪除對象的話,只能按照類的實現者提供的方法進行。

code

class MyClass {

    ~MyClass();
int _age;
    std::string _name;

public:
    MyClass() = default;
    MyClass(int age,std::string name):_age(age),_name(name){}

    void destory() { 
    /* do something... */
    delete this; } };
#include "MyClass.h"

int main()
{
    MyClass  A;   // error !
    MyClass* B = new MyClass;
}

 

這樣作的動機:好比這樣一種狀況,你但願在析構以前必須作一些事情,可是用你類的人並不知道,
那麼你就能夠從新寫一個函數,裏面把要作的事情所有作完了再調用析構函數。
這樣人家只能調用你這個函數析構對象,從而保證了析構前必定會作你要求的動做。對象

除此以外:這樣作還會限制繼承。
若是一個類不打算做爲基類,一般採用的方案就是將其析構函數聲明爲private。  C++11中可使用final關鍵字實現。blog

相關文章
相關標籤/搜索