Heim > Backend-Entwicklung > C++ > Hauptteil

Warum wird der Zeiger in C durch „Löschen' nicht automatisch auf NULL gesetzt?

Linda Hamilton
Freigeben: 2024-11-11 05:53:03
Original
888 Leute haben es durchsucht

Why Doesn't `delete` Automatically Set the Pointer to NULL in C  ?

Warum beim Löschen der Zeiger nicht automatisch auf NULL gesetzt wird

Trotz seiner potenziellen Vorteile bei der Verhinderung ungültiger Zeiger-bedingter Abstürze ist dies beim C-Standard nicht der Fall Sie schreiben vor, dass der Löschoperator den Zeiger nach der Freigabe des Speichers automatisch auf NULL setzt. Die Gründe für diese Entscheidung sind vielfältig.

Leistung

Das Hinzufügen einer Anweisung zum Setzen des Zeigers auf NULL könnte möglicherweise die Leistung des Löschvorgangs verlangsamen. Während dies für die meisten Anwendungen vernachlässigbar sein mag, könnte es Auswirkungen auf leistungskritische Systeme haben.

Konstanten

Const-Zeiger stellen eine potenzielle Herausforderung dar. Das Setzen eines const-Zeigers auf NULL würde seine Unveränderlichkeit verletzen und zu undefiniertem Verhalten führen. Der Standard hätte jedoch einen Sonderfall für const-Zeiger bereitstellen können, der es ermöglicht, sie auf NULL zu setzen.

Argumentflexibilität

Der Standard lässt ausdrücklich zu, dass das Argument von delete ist ein R-Wert, nicht nur ein L-Wert. Das Löschen eines Arrays erfordert beispielsweise die Angabe des Array-Namens als Argument: delete [] array;. In solchen Fällen ist es nicht möglich, den Zeiger auf NULL zu setzen, da er nach dem Löschen nicht auf einen gültigen Speicherort zeigt.

Weitere Überlegungen

Bjarne Stroustrup, Der Ersteller von C erkennt die potenziellen Vorteile der automatischen NULL-Einstellung beim Löschen an, stellt jedoch fest, dass die Implementierer diese Praxis nicht weit verbreitet haben. Er betont auch, dass Programmierer wachsam sein müssen, um sicherzustellen, dass Zeiger nach der Freigabe ordnungsgemäß behandelt werden.

Zusammenfassend lässt sich sagen, dass das automatische NULL-Setzen durch Löschen zwar Vorteile hätte, der C-Standard sich jedoch dafür entschieden hat, dies nicht vorzuschreiben Leistungsbedenken, die Notwendigkeit, bestimmte Fälle zu berücksichtigen, und die Bedeutung der Verantwortung des Programmierers bei der Verwaltung von Zeigern.

Das obige ist der detaillierte Inhalt vonWarum wird der Zeiger in C durch „Löschen' nicht automatisch auf NULL gesetzt?. 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