Gewusst wie: Verwenden von C++ Virtuelle Destruktoren

August 28

Eine virtuelle Methode hat keine direkte Implementierung und das Verhalten wird bestimmt durch die Methode mit der gleichen Signatur, die auf der untersten Vererbungsebene des instanziierten Objekts ist. Ein Destruktor wird automatisch aufgerufen, wenn das Objekt zerstört wird. Ein virtueller Destruktor in C++ werden in erster Linie Ressourcenverluste zu verhindern durch Ausführen einer Sanierung des Objekts. Die folgenden Schritte erklären, wie virtuelle Destruktoren in C++ zu verwenden.

Anweisungen

1 Bestimmen Sie einen virtuellen Destruktor zu verwenden. Ein Destruktor für eine Klasse sollte virtuell sein, wenn ein Objekt einer abgeleiteten Klasse wird durch den Aufruf des Basisklasse Destruktors zerstört. Der Destruktor muss virtuell sein, wenn Sie einen Zeiger auf ein Objekt zu löschen und es möglich ist, dass er auf einer abgeleiteten Klasse verweist.

2 Lernen Sie einen wichtigen Unterschied zwischen einen Destruktor und anderen Methoden. In beiden Fällen wird die Methode der abgeleiteten Klasse aufgerufen, wenn sie umgesetzt wird. Der Destruktor der Basisklasse wird jedoch später aufgerufen, während dies mit anderen Methoden nicht geschieht.

3 Betrachten Sie das folgende Beispiel für einen virtuellen Destruktor:

enthalten Klasse Base_class{

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

};Klasse Derived_class: öffentliche Base_class{public:

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

};void main(){

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

}

4 Beachten Sie die Verwendung des Schlüsselworts "virtuelle" im Beispiel in Schritt 3. Wenn der Destruktor der Basisklasse nicht als virtual deklariert wurden, würde der Destruktor der abgeleiteten Klasse nicht aufgerufen werden.

5 Implementieren Sie mindestens einem leeren Meldungstext für einen virtuellen Destruktor, da eine reine virtuelle Funktion deklariert werden kann.