推 willhunting:這不就是為何要有virtual destructor的原因嗎 10/06 16:12
推 littleshan:嗯,用 virtual destructor 即可 10/06 17:06
→ legnaleurc:可是執行到 super class 的 destructor 時 10/06 19:20
→ legnaleurc: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