Re: [問題] 多型的自動回收

看板C_and_CPP (C/C++)作者 (我要加入劍道社!)時間16年前 (2009/10/06 19:33), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/13 (看更多)
※ 引述《legnaleurc (CA)》之銘言: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.205.248.119

10/06 16:12,
這不就是為何要有virtual destructor的原因嗎
10/06 16:12

10/06 17:06,
嗯,用 virtual destructor 即可
10/06 17:06

10/06 19:20,
可是執行到 super class 的 destructor 時
10/06 19:20

10/06 19:20,
subclasses 定義的 virtual function 還能正常使用嗎?
10/06 19:20
因為 destructor 並非一般的 member function 因此把它宣告為 virtual 時 行為也和一般的 member function 有所差異 class Base { public: virtual ~Base() {...} }; class Derived : public Base { public: void ~Derived() {...} }; void foo() { Base* bp = new Derived(...); ... delete bp; } 上述的程式碼在執行到 delete bp 時 因為 Base 的 destructor 宣告為 virtual 實際上會先以 virtual function invocation 的方式 先執行 Derived 的 destructor 然後再執行 Base 的 destructor (這是 compiler 幫你加上去的) Base 的 destructor 在執行時不能呼叫 virtual function 因為此時 Derived 已經被解構 但在那之前 Derived 的 destructor 會先被呼叫 所以並不構成大礙 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.76.130
文章代碼(AID): #1Aooid2v (C_and_CPP)
文章代碼(AID): #1Aooid2v (C_and_CPP)