Ich erinnere mich, irgendwo gelesen zu haben, dass es für delete NULL
notwendig ist, eine gültige Operation in C ++ zu sein, aber ich kann mich nicht erinnern, warum es so sein sollte. Würde mich bitte jemand daran erinnern?
Die Regel ist nicht unbedingt notwendig, da die Sprache ohne sie existieren könnte ; es ist einfach eine Entscheidung des Normenausschusses. Der Nullzeiger ist keine gültige Speicheradresse. Ich würde jedoch gerne glauben, dass jede Entscheidung aus einem bestimmten Grund getroffen wird und diese Gründe wissenswert sind.
Diese Regel vereinfacht die Verwaltung von Fehlerfällen und anderen Instanzen, in denen ein Zeiger null sein kann. Es ist eine einfache, kostengünstige Prüfung zu machen, und es fügt der Sprache spürbare Bequemlichkeit hinzu.
Wenn beispielsweise viele Bedingungen existieren, die zu einer dynamischen Speicherzuweisung führen würden, andere aber auch existieren, die nicht funktionieren, ist es bequem, am Ende ein delete
anzuhängen und sich nicht darum zu kümmern.
Wenn delete nullptr
illegal wäre, wäre jeder Aufruf von delete
von ... umgeben.
... und das wäre lahm. Da dies die Norm ist, eine im Wesentlichen obligatorische Konvention, warum nicht einfach die Notwendigkeit, vollständig zu überprüfen? Warum benötigen Sie mindestens 5 Zeichen für jeden Aufruf von delete
?
Erstens ist NULL
niemals ein gültiger Zeigerwert (in einem gehosteten C ++ - Programm), und so gibt es keine Zweideutigkeit, ob der Zeiger auf ein Live-Objekt zeigt oder nicht. Zweitens muss die interne Speicherverwaltungslogik ohnehin ihre eigenen Prüfungen durchführen, um die Buchhaltung durchzuführen, so dass vermutlich nichts davon herrühren würde, dass der Zeiger nicht null ist.
So, jetzt wissen wir, dass gegen diese Regel nichts spricht , hier ist das große Argument: Es macht es viel einfacher, Code zu schreiben. Betrachten Sie diese einfache Ausnahmebehandlungskomponente des Zuordnungscodes:
%Vor%Das ist einfach und übersichtlich. Wenn wir überall NULL-Checks hinzufügen müssten, würde dies den Code viel weniger lesbar machen und die Logik des Codes verdecken.
Weil das Standard-Komitee weiß, dass das no -Programm NULL auf ein gültiges Objekt zeigen kann, dh NULL kann nicht auf einen gültigen Speicher zeigen, deshalb ist es sicher, delete NULL
zu schreiben, genau deshalb, weil es nicht funktioniert t eigentlich alles löschen. Da dies sicher ist, erspart es Ihnen, nach NULL zu suchen, bevor delete
:
Das Löschen eines Null-Zeigers hat keine Auswirkungen (wenn die Freigabe-Funktion in der Standardbibliothek [2] angegeben ist), muss vor dem Aufruf von delete nicht nach einem Nullzeiger gesucht werden.
Überprüfen Sie auch Ist es sicher, einen NULL-Zeiger zu löschen? es kann dir helfen
Nun, ich erinnere mich noch genau daran, dass sich die Regeln für das Löschen von Zeiger-zu- const
(jetzt OK) mit der Standardisierung geändert haben, d. h. sie waren im ARM, dem Annotated Reference Manual, anders.
Aber ich bin mir nicht sicher, 0 zu löschen; Ich denke, es wurde immer unterstützt.
Wie auch immer, es geht nur um convenience für eine Operation, bei der die Kosten für die Überprüfung unbedeutend sind und wo sie möglicherweise vom Compiler effizienter ausgeführt werden können als von einer benutzerdefinierten Wrapper-Funktion für Löschen.
Tags und Links c++ delete-operator