Heim > Backend-Entwicklung > C++ > Sollten reine virtuelle Destruktoren in C definiert werden?

Sollten reine virtuelle Destruktoren in C definiert werden?

Linda Hamilton
Freigeben: 2024-12-16 17:46:10
Original
195 Leute haben es durchsucht

Should Pure Virtual Destructors in C   Be Defined?

Definieren rein virtueller Destruktoren in C: Enthüllung der Fallstricke

Das Konzept rein virtueller Destruktoren in C wirft wichtige Fragen hinsichtlich der korrekten Implementierung für auf abstrakte Basisklassen. Betrachten Sie den folgenden Codeausschnitt:

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

Es stellt sich die Frage, ob dieser Ansatz für die Definition einer abstrakten Basisklasse geeignet ist. Obwohl es in MSVC erfolgreich kompiliert wird, bestehen Bedenken, dass es zu Laufzeitabstürzen kommen könnte.

Enthüllung des Problems

Das Problem ergibt sich aus der fehlenden Implementierung für das reine Virtuelle Zerstörer. Wenn abgeleitete Klassen von A erstellt werden, rufen ihre Destruktoren schließlich den Destruktor von A auf. Da der Destruktor von A jedoch rein ist, führt der Aufruf zu undefiniertem Verhalten.

Behebung der Gefahr

Um diesen Laufzeitabsturz zu vermeiden, ist es wichtig, den Destruktor zu implementieren in der Basisklasse selbst. Eine einfache Inline-Implementierung, wie unten gezeigt, reicht aus:

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

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

Diese Implementierung stellt sicher, dass beim Löschen oder Zerstören einer abgeleiteten Klasse der Destruktor von A aufgerufen wird und das Programm sich wie erwartet verhält.

Das obige ist der detaillierte Inhalt vonSollten reine virtuelle Destruktoren in C definiert werden?. 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