Heim > Backend-Entwicklung > C++ > Warum führt der Aufruf einer nicht virtuellen Methode auf einem NULL-Zeiger nicht zu undefiniertem Verhalten?

Warum führt der Aufruf einer nicht virtuellen Methode auf einem NULL-Zeiger nicht zu undefiniertem Verhalten?

Susan Sarandon
Freigeben: 2024-12-31 18:44:13
Original
248 Leute haben es durchsucht

Why Does Calling a Non-Virtual Method on a NULL Pointer Not Result in Undefined Behavior?

Zugriff auf Klassenmitglieder mit einem NULL-Zeiger

Obwohl die foo-Variable als Zeiger auf eine Instanz vom Typ Foo deklariert ist, wird sie mit initialisiert 0, was ihn zu einem Nullzeiger macht. Dies mag kontraintuitiv erscheinen, da der Zugriff auf Mitglieder eines Nullzeigers typischerweise ein undefiniertes Verhalten ist. Bestimmte Umstände erlauben dieses Verhalten jedoch.

Nicht-virtueller Methodenaufruf

Die nicht-virtuelle Methode say_hi() wird trotz des Nullzeigers erfolgreich aufgerufen, da dies nicht der Fall ist eine virtuelle Methode. Virtuelle Methoden erfordern ein gültiges Objekt, um anhand des Objekttyps zu bestimmen, welche Funktion aufgerufen werden soll. Nicht-virtuelle Methoden hingegen verfügen über eine vorgegebene Funktionsadresse, die der Compiler verwendet, um eine direkte Funktionsaufrufanweisung zu generieren.

Im Einzelnen generiert der Compiler Code, der dem folgenden entspricht:

void Foo_say_hi(Foo* this);
Foo_say_hi(foo);
Nach dem Login kopieren

Da die Funktion say_hi() nicht auf diesen Zeiger verweist, entfällt die Notwendigkeit, eine potenzielle Null zu dereferenzieren Zeiger.

Objektzuordnung

Die foo-Variable ist eine lokale Variable innerhalb der Hauptfunktion und wird daher auf dem Stapel der Funktion zugewiesen. Als Zeigervariable wird das eigentliche Objekt, auf das sie zeigt, hier nicht zugewiesen. Der Nullwert gibt an, dass der Zeiger nicht auf ein gültiges Objekt verweist.

Das obige ist der detaillierte Inhalt vonWarum führt der Aufruf einer nicht virtuellen Methode auf einem NULL-Zeiger nicht zu undefiniertem Verhalten?. 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