Ich habe diese Frage gelesen Einen Const-Zeiger löschen und wollte mehr über% co_de erfahren % Verhalten. Nun, nach meinem Verständnis:
delete
funktioniert in zwei Schritten:
delete expression
), indem er den Operator delete aufruft. free()
akzeptiert eine operator delete
. Im Rahmen eines Testprogramms habe ich void*
überladen und festgestellt, dass operator delete
operator delete
Zeiger nicht akzeptiert.
Da der Operator delete keinen const-Zeiger akzeptiert und intern gelöscht wird, ruft der Operator delete auf. Wie funktioniert Einen const-Zeiger zu löschen arbeiten?
Verwendet const
intern const_cast?
const_cast macht gar nichts - es ist eine Möglichkeit, den Compiler über die Const-ness des Objekts zu stöhnen. Das Schlüsselwort delete ist ein Compiler-Konstrukt, der Compiler weiß, was in diesem Fall zu tun ist und kümmert sich nicht um die Const-ness des Zeigers.
diese Antwort sagt, delete
ist keine Methode wie andere, aber ein Teil der Sprache, um Objekte zu zerstören. const
-ness hat keinen Einfluss auf die Zerstörbarkeit.
operator delete akzeptiert eine void *. Als Teil eines Testprogramms habe ich den Operator delete überladen und festgestellt, dass der Operator delete den Zeiger const nicht akzeptiert.
Wie hast du das versucht? Es stimmt natürlich akzeptiert const Zeiger:
%Vor%Dieser Code ist korrekt, kompiliert (wenn auch mit einer begründeten Warnung) und wird ausgeführt.
BEARBEITEN : Lesen Sie den Originalartikel - Sie sprechen nicht über einen Const-Zeiger, sondern einen Zeiger auf const
, was etwas anderes ist. Der Grund, warum dies funktionieren muss, ist dort beschrieben. Warum es funktioniert: Andere haben das gesagt.
delete
macht nur einen Aufruf, um den Speicher freizugeben, auf den der Zeiger zeigt, er ändert weder den Wert des Zeigers noch das Objekt. Daher hat delete
nichts mit der const
-ness des Zeigers oder Objekts zu tun, auf das gezeigt wird.
Tags und Links c++ delete-operator