2012-06-26 14 views
7

Dieses Symbol scheint ein vom Compiler generierter Destruktor zu sein. Was ist der Unterschied zwischen 'compiler generated destructor' und 'scalar deleting destructor'? Gibt es andere Arten von Compiler generierten ctor/dtor?Was bedeutet das Symbol "Vektor löschen Destruktor" in VC++?

+0

ausgedrückt werden Warum Sie nicht über die anwser akzeptieren? – Liviu

Antwort

8

Die Funktionen mit den Namen 'scalar deleting destructor' und 'vector deleting destructor' sind Hilfsfunktionen, die beim Generieren von Code für die delete-Anweisung vom VC-Compiler erstellt wurden. Verwechsle sie nicht mit dem Klassendestruktor, der auch vom Compiler erzeugt werden kann. Ersteres kann in Pseudo-Code als

void scalar_deleting_destructor(A* pa) 
{ 
pa->~A(); 
A::operator delete(pa); 
} 

und letztere als

void vector_deleting_destructor(A* pa, size_t count) 
{ 
for (size_t i = 0; i < count; ++i) 
pa[i].~A(); 
A::operator delete[](pa); 
} 
+1

Danke, Andrey. Ich bin ein wenig verwirrt über den inneren Löschoperator hier. Dieser Skalar-Lösch-Destruktor wird vom Compiler generiert und von 'delete a' aufgerufen, ist das richtig? Scheint der innere Aufruf zum Löschen Rekursion? – Thomson

+3

@Thomson Lassen Sie mich versuchen, es klarer zu machen. "delete a" ist eine * delete-Anweisung *, d. h. ein Sprachkonstrukt, das nicht mit "A :: operator delete" zu verwechseln ist, das ein * delete-Operator * ist, eine Funktion, die den Speicher tatsächlich freigibt. Ich habe den C++ - Standard gerade nicht zur Hand, ich könnte etwas später Referenzen liefern. – Andrey