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 new gehört ein delete und zu jedem new[] ein delete[] . 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.


Anmelden zum Antworten