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!