Nwlapcug.com


Come utilizzare i distruttori virtuali di C++

Un metodo virtuale non ha alcuna implementazione diretta e il comportamento è determinato secondo il metodo con la stessa firma che è il più basso livello di ereditarietà dell'oggetto istanziato. Un distruttore viene chiamato automaticamente quando l'oggetto viene eliminato. Un distruttore virtuale in C++ viene utilizzato principalmente per impedire perdite di risorse eseguendo una pulizia dell'oggetto. La procedura seguente viene illustrato come utilizzare i distruttori virtuali in C++.

Istruzioni

1

Determinare quando utilizzare un distruttore virtuale. Un distruttore di una classe dovrebbe essere virtuale quando un oggetto di una classe derivata verrà distrutto richiamando il distruttore della classe base. Il distruttore deve essere virtuale quando si elimina un puntatore a un oggetto ed è possibile che faccia riferimento a una classe derivata.

2

Imparare un'importante differenza tra un distruttore e altri metodi di membro. In entrambi i casi, il metodo della classe derivata viene richiamato se viene implementato. Tuttavia, il distruttore di classe base viene successivamente chiamato considerando che questo non accade con altri metodi.

3

Si consideri l'esempio seguente di un distruttore virtuale:

includono

Classe Base_class
{

public:
Base_class(){ cout<<"Constructor: Base_class"<<endl;}
// virtual keyword is needed here
virtual ~ Base_class(){ cout<<"Destructor : Base_class"<<endl;}

};
Classe Derived_class: Base_class pubblico
{public:

Derived_class(){ cout<<"Constructor: Derived_class"<<endl;}
~ Derived_class(){ cout<<"Destructor : Derived_class"<<endl;}

};
Sub Main)
{

Base_class *p = new Derived_class();
delete p;

}

4

Osservare l'utilizzo della parola chiave virtual nell'esempio nel passaggio 3. Se il distruttore della classe base non sono stato dichiarato come virtuale, non avrebbe chiamato il distruttore della classe derivata.

5

Poiché una funzione virtuale pura non può essere dichiarata, implementare almeno un corpo vuoto per un distruttore virtuale.