Der Destruktor für die Basisklasse muss aufgerufen werden, wenn das Objekt zerstört wird, also benötigt er eine Definition.
Wie von Jesse erwähnt, werden geerbte Destruktoren immer aufgerufen (sie werden vom Compiler für Sie aufgerufen, ohne dass dieses Verhalten außer Kraft gesetzt werden kann), also muss ein virtueller Destruktor eine Implementierung haben. Wenn also ein reiner virtueller Destruktor eine Implementierung haben muss, was ist der Unterschied zwischen einem reinen virtuellen Destruktor und einem regulären virtuellen Destruktor? Wenn Ihre abstrakte Klasse nur den virtuellen Destruktor deklariert hat und keine anderen rein virtuellen Methoden, verhindert der reine Destruktor, dass jemand die abstrakte Klasse instanziieren kann.
Weil der Standard dies sagt:
12.4.7 Ein Destruktor kann als virtuell (10.3) oder rein virtuell (10.4) deklariert werden; Wenn im Programm Objekte dieser Klasse oder einer abgeleiteten Klasse erstellt werden, muss der Destruktor definiert werden.
Der Grund dafür ist, dass es explizit aufgerufen wird, wenn ein Objekt einer abgeleiteten Klasse zerstört wird.
Siehe auch die Antworten auf meine vorherige Frage: Unter welchen Umständen ist es vorteilhaft, eine Implementierung einer reinen virtuellen Funktion zu geben?
Nur ein virtueller dtor kann als rein deklariert werden. Aber nachdem Sie eine Deklaration hinzugefügt haben, müssen Sie den Körper des dtor implementieren. Wie bereits erwähnt, rufen die Destruktoren ihren Eltern-dtor auf, alles bis zur Vererbungskette.
Tags und Links c++ virtual-destructor