map<> Destruktor
-
Hi,
ich mache in einer Klasse das:
map<string, X> m; X *p = new X(a,b,c); m.insert(pair<string, X>(string("foo"), *p);Was muß ich im Destruktor machen, um den Speicher auf
dem Heap freizugeben?
-
Im Destruktor nichts.
Aber unmittelbar nach insert(..) wird p und das Objekt wo p drauf zeigt nicht mehr benötigt: delete p;ABER: besser noch Du erstellt das ein Objekt der Klasse X erst gar nicht mit new.
Simon
-
Ok, danke!
Das bei insert ist call-by-value, deshalb wird hier ne kopie eingefügt oder was?
-
Jop in der map wird ne Kopie von dem Objekt erstellt auf das p zeigt.
Lg freeG
-
vantheman schrieb:
Das bei insert ist call-by-value, deshalb wird hier ne kopie eingefügt oder was?
Nein, du übergibst eine Const-Referenz. Intern wird der Wert kopiert.
Und schau nochmals thetas "ABER" an, das ist nämlich wichtig.
-
Das Problem ist jetzt nur, das ich noch eine Referenz auf das Objekt brauche, da ich diese noch in einen anderen Container packen möchte.
Dann müsste ich also eine Referenz auf den Inhalt der Map erzeugen?
-
Der Rückgabewert von
insert()ist, was du suchst. Auf www.cplusplus.com kannst du die Dokumentation nachschlagen.
-
Coole Sache, danke!