Come in
class TestA
{
TestA();
virtual ~TestA();
}
Quindi perché e quando il distruttore per TestA dovrebbe essere virtuale ??
Come in
class TestA
{
TestA();
virtual ~TestA();
}
Quindi perché e quando il distruttore per TestA dovrebbe essere virtuale ??
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.
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.
Leggi altre domande sui tag c++