Heim >Backend-Entwicklung >C++ >Warum stürzt mein Programm mit dem Fehler „Pure Virtual Function Call' ab?

Warum stürzt mein Programm mit dem Fehler „Pure Virtual Function Call' ab?

Linda Hamilton
Linda HamiltonOriginal
2024-11-12 03:51:01689Durchsuche

Why Does My Program Crash with a

Das Geheimnis der Abstürze bei „reinen virtuellen Funktionsaufrufen“ lüften

Im digitalen Bereich sind Abstürze ein unvermeidbares Ärgernis, das dazu führen kann, dass Benutzer sich den Kopf kratzen. Unter diesen verwirrenden Fehlern sticht „rein virtueller Funktionsaufruf“ als ein besonders verwirrendes Rätsel hervor.

Dieses Problem tritt auf, wenn ein Objekterstellungsversuch für eine abstrakte Klasse fehlschlägt und Benutzer sich fragen, wie solche Programme überhaupt kompiliert werden. Der Übeltäter liegt jedoch nicht in der abstrakten Natur der Klasse, sondern vielmehr in dem Versuch, eine virtuelle Funktion innerhalb eines Konstruktors oder Destruktors aufzurufen.

Wie im folgenden Codeausschnitt dargestellt, handelt es sich bei einem solchen Versuch um einen Programmier-Fauxpas:

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
}

Hier ruft der Konstruktor der Basisklasse die virtuelle Funktion doIt() auf. Da die abgeleitete Klasse Derived jedoch noch nicht vollständig erstellt wurde, ist die virtuelle Funktionstabelle noch nicht erstellt, was zu einem Aufruf der rein virtuellen Funktion der Basisklasse führt, die nicht existiert.

Dieses fehlerhafte Szenario führt zum gefürchteten Fehler „rein virtueller Funktionsaufruf“, der zum Absturz des Programms führt.

Um solche Pannen zu vermeiden, ist es wichtig, virtuelle Funktionsaufrufe innerhalb von Konstruktoren oder zu vermeiden Zerstörer. Durch die Einhaltung dieser Best Practice können Sie die Stabilität Ihres Codes sicherstellen und sich die Mühe ersparen, diese schwer fassbaren Abstürze zu debuggen.

Das obige ist der detaillierte Inhalt vonWarum stürzt mein Programm mit dem Fehler „Pure Virtual Function Call' ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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