Heim > Backend-Entwicklung > C++ > Sollten abstrakte Basisklassen in C rein virtuelle Destruktoren haben?

Sollten abstrakte Basisklassen in C rein virtuelle Destruktoren haben?

Linda Hamilton
Freigeben: 2024-12-28 06:21:17
Original
807 Leute haben es durchsucht

Should Abstract Base Classes in C   Have Pure Virtual Destructors?

Rein virtuelle Destruktoren in C

In der Welt der objektorientierten Programmierung erfordern abstrakte Basisklassen oft rein virtuelle Destruktoren. Beim Schreiben von Code wie diesem treten jedoch Bedenken auf:

class A {
public:
    virtual ~A() = 0;
};
Nach dem Login kopieren

Dies wirft die Frage auf, ob es akzeptabel ist, dass eine abstrakte Basisklasse einen rein virtuellen Destruktor hat. Während Microsoft Visual C es ohne Probleme kompiliert, was passiert zur Laufzeit?

Die Antwort lautet: Undefiniertes Verhalten. Wenn eine Instanz einer von A abgeleiteten Klasse gelöscht oder zerstört wird, wird der Destruktor von A aufgerufen. Da es jedoch rein virtuell ist und keine Implementierung vorhanden ist, löst dies undefiniertes Verhalten aus. Auf bestimmten Plattformen kann dies dazu führen, dass der Purecall-Handler aufgerufen wird, was zu einem Absturz führt.

Um dies zu vermeiden, ist es wichtig, auch den Destruktor zu implementieren. Eine minimale Implementierung wie diese sollte ausreichen:

class A {
public:
    virtual ~A() = 0;
};

inline A::~A() { }
Nach dem Login kopieren

Auf diese Weise verursacht der Destruktor von A kein undefiniertes Verhalten, wenn Instanzen abgeleiteter Klassen gelöscht werden.

Das obige ist der detaillierte Inhalt vonSollten abstrakte Basisklassen in C rein virtuelle Destruktoren haben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage