Re: [問題] 多型的自動回收
看板C_and_CPP (C/C++)作者littleshan (我要加入劍道社!)時間16年前 (2009/10/06 19:33)推噓0(0推 0噓 0→)留言0則, 0人參與討論串2/13 (看更多)
※ 引述《legnaleurc (CA)》之銘言:
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.205.248.119
推
10/06 16:12,
10/06 16:12
推
10/06 17:06,
10/06 17:06
→
10/06 19:20,
10/06 19:20
→
10/06 19:20,
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
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章