Quando e perché un distruttore dovrebbe essere dichiarato come virtuale?

4

Come in

class TestA
{
     TestA();
     virtual ~TestA(); 
}

Quindi perché e quando il distruttore per TestA dovrebbe essere virtuale ??

    
posta user163824 11.05.2015 - 18:50
fonte

2 risposte

14

Qualsiasi classe che abbia metodi virtuali dovrebbe avere un distruttore virtuale. Altrimenti, il distruttore della superclasse non verrà chiamato se l'oggetto viene cancellato attraverso un puntatore alla classe figlia.

In altre parole, se la parola chiave virtual esiste nella dichiarazione della classe, devi avere almeno questo:

virtual ~Class() {};

In teoria, non devi farlo se non elimini mai un oggetto figlio tramite un puntatore a una classe base, ma in pratica è molto più sicuro farlo all'inizio, indipendentemente da come viene utilizzata la classe , poiché non farlo non ha alcun vantaggio reale.

    
risposta data 11.05.2015 - 20:18
fonte
2

Il distruttore dovrebbe essere dichiarato virtuale se l'ereditarietà è coinvolta e la classe derivata deve essere distrutta in un modo specifico diverso dalla classe base.

    
risposta data 11.05.2015 - 18:55
fonte

Leggi altre domande sui tag