參考: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