STL container erase und delete?
-
Gibt es keine andere möglichkeit um das problem mit der Speicherfreigabe (erase), bei
std::list<foo*> LIST. LIST.push_bach(new foo()); . . . . LIST.erase(...);zu ermöglichen ohne nen smart poiner zu verwenden bzw. es manuel mit delete zulöschen?
-
Hi,
smart Pointer oder kein foo* sondern foo benutzen. Ne andere Möglichkeit sehe ich nicht ...
-
hmm schade, dachte die erase funktion könnte das objekt selber löschen, aber das ist ja auch nicht unbeding das wahre aller dinge
-
Wenn es darum geht alles irgendwie schön zu verpacken, dann schreib dir ein Funktionsobjekt Deleter() und gib es mit der list an for_each().
Zudem ändert sich doch bei der Benutzung eines smart Pointers nur die Definition der List, alles andere bleibt gleich, oder was ist der Grund, dass du auf smart Pointer verzichten willst.
-
ne will nicht auf smart pointer verzichten.. hab mich aber noch nicht mit boost auseinder gestetzt bzw. installiert.. die std::auto_ptr kann man ja vergessen
-
http://bl4ckd0g.bl.funpic.de/docs/Smartpointer.pdf
http://www.c-plusplus.net/forum/viewtopic-var-t-is-134971.html

Bissl Zeit opfern und lesen ...
-
danke KasF
wie smartpointer funktionieren weis ich ja .. hab aber boost noch net eingebunden;)
-
das geht recht schmerzfrei. einfach mal ausprobieren, du musst dir auch nicht die mühe machen die lib zu bauen, da die smart pointer nur templates sind.
in deinem fall wäre wohl der shared_ptr der richtige.
http://www.boost.org/libs/smart_ptr/smart_ptr.htm