Wie einen Vektor deleten?
-
SegmentationFault schrieb:
Die Vektorelemente können ja ruhig Zeiger sein, aber der Vektor selber...?
Hmm, ok. Aber dann muss ich doch trotzdem aufräumen, oder?
-
Hallo,
wenn du mit new Speicher allokierst, musst du für jedes Element des Vectors delete aufrufen.
-
wie wärs mit auto_ptr. <algorithm> fällt dann natürlich aus...
template <class T> class Bar { public: void addAllBarsToVector(vector< auto_ptr< Bar<T> > >& vec) { for (int i = 0; i < foo; i++) { vec.push_back(new Bar<T> (i)); } }
-
das ist doch kacke.
Dann lieber irgendnen smart-pointer von boost, da kannste dann wenigstens nach wie vor alles benutzen.MfG Jester
-
Jester schrieb:
das ist doch kacke.
Kannst du mir erklären warum?
Danke
-
Weil Du keine Algorithmen verwenden kannst.
Und auch keine Kopie von dem Containter machen kannst.
Zumindest nicht mehr mit dem Copy-Konstruktor.
-
Achso. Leuchtet ein. Nochmals Danke
-
auto schrieb:
wie wärs mit auto_ptr
Kurz: Falsch.
Einen standardkonformen auto_ptr kann und darf man nicht in einen STL-Container packen und einen nicht konformen auto_ptr sollte man nicht in einen STL-Container packen, da der Code dadurch unportabel wird.http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=auto_ptr#Answ
-
CarstenJ schrieb:
Hallo,
wenn du mit new Speicher allokierst, musst du für jedes Element des Vectors delete aufrufen.
Macht das nicht der Destruktor von vector? Reicht es nicht wenn ich einfach delete vekPtr mache? Muss ich echt durchiterieren und für jedes Element im vector delete aufrufen?
-
Wenn der Vector Pointer aufnehmen soll, enthält er Pointer,
und keine Objekte. Du musst also jedes Objekt wieder Löschen.Devil
-
Markus3: Nimm am besten einen Shared Pointer. zum Beispiel aus boost den boost::shared_ptr von www.boost.org