/*Child is inherited from Parent*/
class Parent {
public:
Parent() //Constructor
{
cout << "\n Parent constructor called\n" << endl;
}
protected:
~Parent() //Dtor
{
cout << "\n Parent destructor called\n" << endl;
}
};
class Child : public Parent
{
public:
Child() //Ctor
{
cout << "\nChild constructor called\n" << endl;
}
~Child() //dtor
{
cout << "\nChild destructor called\n" << endl;
}
};
int main()
{
Parent * p2 = new Child;
delete p2;
return 0;
}
Se eseguo il distruttore virtuale di Parent
, ottengo un errore, quindi qual è lo scopo di rendere virtuale un distruttore protetto?Esiste un uso per rendere virtuale un distruttore protetto?
Forse dovremmo iniziare con "perché dovresti proteggere i dtor?". –
Perché hai mai voluto rendere virtuale il distruttore? Non dovresti * tu * conoscere lo scopo? Un distruttore protetto significa che gli oggetti non devono essere distrutti tramite puntatori di base, quindi il codice in 'main' è completamente sbagliato. – thiton
Vedere http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors – user998692