Abstürze bei „reinen virtuellen Funktionsaufrufen“ verstehen
Bei der Programmierung können Fehler bei „reinen virtuellen Funktionsaufrufen“ manchmal dazu führen, dass Programme abrupt abstürzen. Diese Fehler treten auf, wenn versucht wird, während der Objektkonstruktion oder -zerstörung eine rein virtuelle Funktion aufzurufen.
Reine virtuelle Funktionen
Eine rein virtuelle Funktion ist eine Mitgliedsfunktion von eine abstrakte Klasse, die nur eine Deklaration, aber keine Implementierung hat. Es zwingt abgeleitete Klassen, ihre eigenen Versionen der Funktion zu implementieren.
Einschränkungen von Konstruktoren und Destruktoren
Konstruktor- und Destruktorfunktionen werden während der Objektinitialisierung bzw. -zerstörung aufgerufen. Während dieser Sonderfunktionen sind virtuelle Funktionsaufrufe verboten, weil:
Ursache von Abstürzen
Abstürze bei „Reinen virtuellen Funktionsaufrufen“ treten auf, wenn:
Beispiel
Bedenken Sie diesen Code:
class Base { public: Base() { reallyDoIt(); } void reallyDoIt() { doIt(); } // DON'T DO THIS virtual void doIt() = 0; }; class Derived : public Base { void doIt() {} }; int main(void) { Derived d; // This will cause "pure virtual function call" error }
In diesem Beispiel versucht der Aufruf von realDoIt() im Basiskonstruktor, die rein virtuelle Funktion doIt() aufzurufen. Da der Konstruktor aufgerufen wird, wurde das abgeleitete Klassenobjekt noch nicht erstellt und es tritt ein Fehler „rein virtueller Funktionsaufruf“ auf.
Lösung
Um diese zu vermeiden Abstürze vermeiden, vermeiden Sie den Aufruf rein virtueller Funktionen über Konstruktoren oder Destruktoren. Stellen Sie stattdessen sicher, dass abgeleitete Klassen ihre eigenen Implementierungen bereitstellen, bevor Sie die rein virtuellen Funktionen aufrufen.
Das obige ist der detaillierte Inhalt vonWarum verursachen „Pure Virtual Function Call'-Fehler Programmabstürze?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!