參考:
當我們將析構函式宣告為私有時,就意味著析構函式只能在類域中被呼叫,無法被外界(包括自己的物件)呼叫。 表現為:
1. 禁止使用者對此型別的變數進行定義,即禁止在棧記憶體空間內建立此型別的物件。要建立物件,只能用 new 在堆上進行。
2. 禁止使用者在程式中使用 delete 刪除此型別物件。物件的刪除只能在類內實現,也就是說只有類的實現者才有可能實現對物件的 delete,使用者不能隨便刪除物件。
如果使用者想刪除物件的話,只能按照類的實現者提供的方法進行。
classmyclass
void destory()
};
#include "myclass.h
"int
main()
這樣做的動機:比如這樣一種情況,你希望在析構之前必須做一些事情,但是用你類的人並不知道,
那麼你就可以重新寫乙個函式,裡面把要做的事情全部做完了再呼叫析構函式。
這樣人家只能呼叫你這個函式析構物件,從而保證了析構前一定會做你要求的動作。
除此之外:這樣做還會限制繼承。
如果乙個類不打算作為基類,通常採用的方案就是將其析構函式宣告為private。 c++11中可以使用final關鍵字實現。
析構函式宣告為私有的作用
當我們規定類只能在堆上分配記憶體時,就可以將析構函式宣告為私有的。class alloc public alloc private alloc 如果在棧上分配空間,類在離開作用域時會呼叫析構函式釋放空間,此時無法呼叫私有的析構函式。如果在堆上分配空間,只有在delete時才會呼叫析構函式。可以新增乙...
析構函式宣告為私有的作用
當我們規定類只能在堆上分配記憶體時,就可以將析構函式宣告為私有的。class alloc 如果在棧上分配空間,類在離開作用域時會呼叫析構函式釋放空間,此時無法呼叫私有的析構函式。如果在堆上分配空間,只有在delete時才會呼叫析構函式。可以新增乙個destroy 函式來釋放,從而解決不能在析構函式中...
析構函式宣告為虛函式
base pb inherit c inherit 是繼承 base的 pb c delete pb 時需要呼叫物件的析構函式,如果基類析構不是virtual型,會根據pb的定義型別呼叫相應類的析構函式,即呼叫即類析構,但如果你在派生類析構裡有記憶體釋放操作,那就會發生記憶體洩漏。假如基類析構是vi...