これは安全ですか?
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が呼び出されました。未定義動作ですか?