條款07 為多型基類宣告virtual析構函式

2021-08-05 19:12:13 字數 1147 閱讀 6521

// 條款07: 為多型基類宣告virtual析構函式

// 1.c++明確指出,當子類物件經由乙個基類指標刪除,而該基類帶著乙個non-virtual析構函式,

// 其結果未有定義。實際執行時通常發生的是物件的derived成分沒有被銷毀。也就是不光子類

// 裡面的成員變數可能沒被銷毀,而子類的析構函式也未能執行起來。而基類成分通常會被銷毀,

// 造成了乙個詭異的「區域性銷毀」物件。

// 2.析構函式的運作方式是,最深層派生的那個類最先析構,然後其每乙個base class被析構。

// 3.polymorphic(帶多型性質的)base classes應該宣告乙個virtual析構函式。如果class

// 帶有任何virtual函式,它就應該擁有乙個virtual析構函式。這樣的基類的設計目的是為了

// 用來通過基類介面處理derived class物件。

// 4.乙個類的設計目的如果不是作為基類使用,或不是為了具備多型性,就不應該宣告為virtual

// 析構函式。

// 5.宣告虛析構函式的另乙個用途是,當定義乙個抽象類的時候,沒有想要定義為virtual的函式,

// 可以將析構函式進行virtual

#include #include using namespace std;

class abstractclass ;

class base06

virtual ~base06()

void introducenovirtual()

virtual void introducewithvirtual()

};class derived061 : public base06

~derived061()

void introducenovirtual()

virtual void introducewithvirtual()

};class derived062 : public derived061

~derived062()

void introducenovirtual()

virtual void introducewithvirtual()

};int main07()

條款07 為多型基類宣告virtual析構函式

結論1 polymorphic 帶多型性質的 base classes 應宣告乙個virtual 析構函式。如果class帶有任何virtual函式,它就應該擁有乙個virtual析構函式。c 指出當derived class物件經由乙個base class指標被刪除,而該base class帶有乙...

條款07 為多型基類宣告virtual析構函式

1 任何帶有虛函式的類都幾乎確定應該定義乙個虛析構函式。乙個經驗是 只有當類含有至少乙個virtual函式才會為它宣告virtual析構函式。2 如果乙個類不含有virtual函式,通常表示它並不意圖作為基類 當類不意圖作為基類,令其析構函式為virtual是個餿主意。因為有虛函式,該類就要有指向虛...

條款07 為多型基類宣告virtual析構函式

總結 1.帶有多型性質的基類,應該將其析構函式宣告為virtual,如果class帶有任何虛函式,他就應該有乙個virtual的析構函式。因為如果乙個基類的指標指向派生類的物件,而這個基類的析構函式不是虛函式的話,那麼在銷毀這個指標的時候,派生類對物件中的派生類成份沒有被銷毀,這樣會造成詭異的區域性...