Heim  >  Artikel  >  Backend-Entwicklung  >  Warum ist der Zugriff auf „this“ nach „delete this“ in C strengstens verboten?

Warum ist der Zugriff auf „this“ nach „delete this“ in C strengstens verboten?

Susan Sarandon
Susan SarandonOriginal
2024-11-12 20:50:02962Durchsuche

Why is accessing

Achten Sie auf die undefinierten Konsequenzen von „dies löschen“; Die Prüfung seines Werts ist verboten

Bei Verwendung des „delete this“-Konstrukts in C wird in den C-FAQs dringend davon abgeraten, nachträglich auf den „this“-Zeiger zuzugreifen oder ihn zu manipulieren. Die Gründe für diese Einschränkung gehen über die drei vorherigen in den FAQ aufgeführten Gründe hinaus:

Grund für die Einschränkung Nr. 4: Der Wert von „this“ nach dem Aufruf von „delete this“ ist von Natur aus nicht spezifiziert und undefiniert . Daher rufen alle nachfolgenden Versuche, damit zu interagieren, einschließlich, aber nicht beschränkt auf die folgenden, garantiert undefiniertes Verhalten hervor:

  • Untersuchung oder Inspektion
  • Vergleich mit anderen Zeigern oder NULL
  • Den Wert drucken oder ausgeben
  • Neuinterpretation Casting
  • Jede Form der Manipulation

Mögliche Folgen des Ignorierens der Einschränkung:

Während einige Compiler in diesem speziellen Fall möglicherweise undefiniertes Verhalten verarbeiten in vorhersehbarer Weise erfolgt, eine Garantie gibt es nicht. Die C-Spezifikation ermöglicht es dem Compiler ausdrücklich, jedes Verhalten zu bestimmen, wenn er undefinierte Aktionen ausführt. Dies könnte bizarre oder sogar katastrophale Folgen haben, einschließlich, aber nicht beschränkt auf Datenbeschädigung oder vollständigen Systemausfall.

Sichere Alternative:

Um diese Einschränkung zu umgehen, verwenden Sie it Es wird empfohlen, vor dem Aufruf von „delete this“ eine Kopie des „this“-Zeigers (z. B. als Ganzzahl) zu erstellen, um sicherzustellen, dass der Wert des ursprünglichen Zeigers danach zugänglich und vorhersehbar bleibt Löschung.

Das obige ist der detaillierte Inhalt vonWarum ist der Zugriff auf „this“ nach „delete this“ in C strengstens verboten?. 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