map +Schlüssel +delete
-
Hi,
Wenn ich bei einer map als Schlüssel einen mit new erzeugten pointer a_ptr übergebe, und ich dann das element mit schlüssel a_ptr lösche, wird dann die Instanz der Klasse zerstört ??
Gruß
-
Wenn du den Zeiger mit
erase()entfernst, wird die Instanz dahinter nicht zerstört, folglich hast du ein Memory Leak.Merke dir: Zu jedem
newgehört eindeleteund zu jedemnew[]eindelete[]. Es gibt zwar ein paar Ausnahmen, aber die lasse ich jetzt mal weg...
-
Ja hätte mich auch gewundert.
Das zu jedem new ein delete gehört ist schon klar.
SPeicher löcher erzeuge ich schon relativ lange nciht mehr=)
Was mir nicht klar ist:
Ich habe new für eine klasse überschrieben.
Wenn ich die matrix mit new instanziere, wird mein new operator aufgerufen, und es funktioniert alles.
Wenn ich aberr mein new operator von einer Memberfunktion aus aufrufe, gehts schief.
Gruß
-
511 /** 512 * @brief Erases an element from a %map. 513 * @param position An iterator pointing to the element to be erased. 514 * 515 * This function erases an element, pointed to by the given 516 * iterator, from a %map. Note that this function only erases 517 * the element, and that if the element is itself a pointer, 518 * the pointed-to memory is not touched in any way. Managing 519 * the pointer is the user's responsibility. 520 */ 521 void 522 erase(iterator __position) 523 { _M_t.erase(__position); }Also der Speicher wird nciht zerstört. Das ist sicher. Daran kanns nicht liegen.