Это безопасно?
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. Является ли поведение undefined?