Chiamare la funzione virtuale dal distruttore

È sicuro?

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; 

Questo codice si blocca a volte con IP in un indirizzo errato.

Non è una buona idea chiamare una funzione virtuale sul costruttore è chiaro per tutti.

Da articoli come http://www.artima.com/cppsource/nevercall.html, capisco che anche il distruttore non è un buon posto per chiamare una funzione virtuale.

La mia domanda è “è vero?” Ho provato con VS2010 e VS2005 e PrivateBase :: FunctionCall è chiamato. È un comportamento indefinito?