何時將析構函式宣告為私有?

2022-08-30 17:45:08 字數 653 閱讀 3931

參考:

當我們將析構函式宣告為私有時,就意味著析構函式只能在類域中被呼叫,無法被外界(包括自己的物件)呼叫。  表現為:

1. 禁止使用者對此型別的變數進行定義,即禁止在棧記憶體空間內建立此型別的物件。要建立物件,只能用 new 在堆上進行。

2. 禁止使用者在程式中使用 delete 刪除此型別物件。物件的刪除只能在類內實現,也就是說只有類的實現者才有可能實現對物件的 delete,使用者不能隨便刪除物件。

如果使用者想刪除物件的話,只能按照類的實現者提供的方法進行。

class

myclass

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...