Ist es falsch zu schreiben:
class A {
public:
virtual ~A() = 0;
};
für eine abstrakte Basisklasse?
Zumindest wird das in MSVC kompiliert ... Wird es zur Laufzeit abstürzen?
c++
polymorphism
destructor
pure-virtual
Ivan Krechetov
quelle
quelle
Antworten:
Ja. Sie müssen auch den Destruktor implementieren:
sollte ausreichen.
Und da dies eine negative Abstimmung erhielt, sollte ich klarstellen: Wenn Sie etwas von A ableiten und dann versuchen, es zu löschen oder zu zerstören, wird
A
der Destruktor schließlich aufgerufen. Da es rein ist und keine Implementierung hat, kommt es zu undefiniertem Verhalten. Auf einer beliebten Plattform wird der Purecall-Handler aufgerufen und stürzt ab.Bearbeiten: Korrektur der Konformität der Erklärung, zusammengestellt mit http://www.comeaucomputing.com/tryitout/
quelle
Private Destruktoren: Sie geben einen Fehler aus, wenn Sie ein Objekt einer abgeleiteten Klasse erstellen - nicht anders. Möglicherweise wird jedoch eine Diagnose angezeigt.
Eine Klasse mit einem reinen virtuellen Destruktor ist eine abstrakte Klasse. Beachten Sie gut:
Direkt aus dem Entwurf entnommen:
quelle