作者littleshan (我要加入剑道社!)
看板C_and_CPP
标题Re: [问题] 多型的自动回收
时间Tue Oct 6 19:33:57 2009
※ 引述《legnaleurc (CA)》之铭言:
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.205.248.119
1F:推 willhunting:这不就是为何要有virtual destructor的原因吗 10/06 16:12
2F:推 littleshan:嗯,用 virtual destructor 即可 10/06 17:06
3F:→ legnaleurc:可是执行到 super class 的 destructor 时 10/06 19:20
4F:→ 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