这安全吗?
class Derived: public PublicBase, private PrivateBase
{
...
~Derived()
{
FunctionCall();
}
virtual void FunctionCall()
{
PrivateBase::FunctionCall();
}
}
class PublicBase
{
virtual ~PublicBase(){};
virtual void FunctionCall() = 0;
}
class PrivateBase
{
virtual ~PrivateBase(){};
virtual void FunctionCall()
{
....
}
}
PublicBase* ptrBase = new Derived();
delete ptrBase;
此代码有时会在 IP 地址错误的情况下崩溃。
每个人都清楚在构造函数上调用虚函数不是一个好主意。
从http://www.artima.com/cppsource/nevercall.html之类的文章中,我了解到析构函数也不是调用虚函数的好地方。
我的问题是“这是真的吗?” 我已经用 VS2010 和 VS2005 进行了测试,并且调用了 PrivateBase::FunctionCall。是未定义的行为吗?