Ich bin verwirrt, warum der folgende C ++ Code kompilieren kann. Warum erzeugt ein Aufruf zum Löschen der Methode 0 keinen Fehler?!
%Vor%Ich habe versucht, es auszuführen, und es hat mir überhaupt keinen Fehler gemacht ...
Sie können einen Null-Zeiger ohne Probleme löschen, und der Fehler, den Sie möglicherweise haben / haben, wird nicht zur Kompilierungszeit, sondern zur Laufzeit sein.
%Vor%Normalerweise ist es bequem zu tun:
%Vor%Es ist ein De-facto-Standard in C- und C ++ - Sprachen (und nicht nur in ihnen), dass Ressourcen-Deallokations-Routinen Null-Zeiger-Argumente akzeptieren und einfach nichts tun müssen. Eigentlich handelt es sich um eine eher konvenierende Konvention. Also, die wirkliche Frage hier: Warum überrascht es Sie? Was lässt Sie glauben, dass ein Fehler auftreten sollte? Außerdem, was lässt Sie denken, dass es nicht kompilieren ???
BTW, Ihre Frage, die Art, wie es gesagt wird, scheint nicht viel Sinn zu machen, da Ihr Code tatsächlich nicht kompilieren kann. Der angeblichen Zeigerdeklaration fehlt ein Typ, der jeden Compiler veranlasst, eine Diagnosemeldung auszugeben.
NULL und 0 sind nicht dasselbe. In C ++ sollten Sie 0 verwenden.
Es gibt keine syntaktisch falsche oder mehrdeutige Löschung des Nullzeigers. In der Tat ist dies per definitionem ein No-Op; Das heißt, die Operation zum Löschen der 0. Adresse ist äquivalent dazu, gar nichts zu tun.
Obwohl Ihr Beispiel trivial ist, gibt es für einen Compiler keine Möglichkeit, den Wert eines Zeigers (zur Kompilierzeit) zu kennen.
Sie können NULL auch zur Kompilierzeit dereferenzieren:
%Vor%Compiler sind nicht dafür ausgelegt, diese Art von Fehlerbedingungen zum Zeitpunkt der Kompilierung zu behandeln.
Und die meisten (alle?) Implementierungen haben 'delete 0' als Nicht-Operation. Dieser Code sollte gut laufen:
%Vor%Obwohl ich mir da nicht 100% ig sicher bin:)