Destruktor eines Zeigers
-
Ich versuche gerade mich in die STL einzuarbeiten. Nun experimentiere ich gerade mit Listen und frage mich was erase genau tut, wenn ich Zeiger speichere?`
std::list<int*> l; int a; int b; int c; l.push_back(&a); l.push_back(&b); l.push_back(&c); l.erase(l.begin());Was passiert hier?
-
Das erste Element wird aus der Liste genommen?
-
Das erase wird den Destruktor des gespeicherten Elements aufrufen (welches übrigens nur eine Kopie des Originals ist). Der Destruktor eines rohen Zeigers gibt nicht den Speicherplatz des Elements frei, auf das der Zeiger zeigt. Es wird einfach nur der Zeiger selbst aufgelöst, nicht großartig anders als wenn zum Beispiel ein int zerstört wird.
-
SeppJ schrieb:
Das erase wird den Destruktor des gespeicherten Elements aufrufen (welches übrigens nur eine Kopie des Originals ist). Der Destruktor eines rohen Zeigers gibt nicht den Speicherplatz des Elements frei, auf das der Zeiger zeigt.
Und was, wenn man shared_ptr's nimmt?

-
Hacker schrieb:
Und was, wenn man shared_ptr's nimmt?

Dann wird der Destruktor eines shared_ptr aufgerufen, was interessantere Konsequenzen hat. Daher habe ich auch ausdrücklich von rohen Zeigern gesprochen.
-
Wenn, dann wohl besser unique_ptr.