delete und destruktor?



  • Kleine Frage:

    Ich möchte eine Liste machen, und habe also meine ListNodes und meine List. In ListNodes habe ich gewisse Variabeln mit new alloziert, welche ich im Destruktor von ListNode mit delete lösche.
    In List habe ich das Objekt auf ListNode wie folgt erstellt:
    ListNode* startNode;
    startNode = new ListNode;
    ...
    delete ListNode;

    Frage:
    Muss ich nun zuerst den destruktor von ListNode(startNode::~ListNode();) aufruffen, oder kann ich tirekt delete ListNode machen? Ich habe nähmlich das problem, dass laut debuger, das Objekt nach delete immernoch existiert!

    2te kleine Frage:

    geht das?

    delete aktuellerNode->next();

    oder auch zum Beispiel:

    tempNode=aktuellerNode->next()->next();

    m_next ist eine Methode, welche return m_next, also Pointer auf das nächste Objekt zurückgiebt!

    Thanks from Franks 😮



  • delete ruft den Destruktor schon auf. Du brauchst also keinesfalls den Destruktor manuell vorher oder nachher aufrufen, bzw. darfst du es auch (zumindest nachher) nicht.
    Außerdem könnt evtl. ein auto_ptr rocken, dann musst du gar nichts mehr selber machen.



  • Erste Frage wäre also geklärt! Besten dank @Optimizer

    👍 😃 👍



  • Bei delete node->next() gefällt mir nicht, dass der m_next von node dann auf ein ungültiges Objekt zeigt. Anders gesagt: node kriegt nichts von der Löschung mit, das würde ihn aber sehr wohl was angehen.



  • Hab mir das so überlegt:

    tempNode=aktuellerNode->next()->next();
    delete aktuellerNode->next();
    aktuellerNode->m_next=tempNode;
    m_size--;

    Möchte nur ein Objekt (next) löschen.
    Müsste doch eigentlich so klappen, oder...!?

    Franky

    EPOWER - the rest is jest peanuts



  • Habs herausgefunden:

    Das problem war, dass ich im Destruktor immer delete m_next aufgeruffen habe, welches natürlich eine Kettenreaktrion ausgelöst hat! Wenn ich also das erse Element gelöscht habe, waren alle weg!!!

    Besten Dank @Optimizer!!! 👍

    mfg, Franky



  • Optimizer schrieb:

    bzw. darfst du es auch (zumindest nachher) nicht.

    man darf es doch(zumindest bevor) 😃


Log in to reply