Wie löscht Deal mit Zeigerkonstanz?

8

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:

  1. Aufruf von Destruktor
  2. gibt dann den Speicher frei (oft mit einem Aufruf von 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?

    
aJ. 16.04.2009, 13:27
quelle

5 Antworten

13

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.

    
sharptooth 16.04.2009, 13:45
quelle
4

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.

    
David Schmitt 16.04.2009 13:42
quelle
2
  

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.

    
Konrad Rudolph 16.04.2009 13:53
quelle
1

delete ist ein Operator, den Sie überlasten können. Es nimmt einen Zeiger als Argument und gibt den Speicher frei, möglicherweise mit free . Der Compiler erlaubt dies, ob der Zeiger const ist oder nicht.

    
Zifre 16.04.2009 13:47
quelle
-1

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.

    
Nick Strupat 04.05.2010 02:44
quelle

Tags und Links