delete this



  • Hallo,

    Ich hoffe mir kann jemand erklären was genau

    delete this;
    

    macht?

    danke sven



  • suizid 😃 ?



  • der destruktor wird für das object aufgerufen und speicher freigegeben.
    wie immer halt.



  • okay ist vieleicht ein bischen wenig! 😃

    hab diesen code in einer Klasse die eine Schnittstelle ansteuert!

    void MySchnittstelleTX::Free(void)
    {
    	delete this;
    }
    

    um diese Klasse zu initialisieren mache ich dies

    MySchnittstelleTX* pMySchnittstelleTX = new MySchnittstelleTX;
    

    Dann wird mit hilfe dieser Klasse eine Methode aufgerufen die mir daten sendet!
    und solbald die Daten erfolgreich versendet wurden wird eine Mehtode Result aufgerufen! nach dem result wird das Free() aufgerufen!
    Durch das Free(); wird doch dann das Objekt MySchnittstelleTX wieder komplett freigegeben, oder?
    Und ich müste dann ein neuese Objekt von MySchnittstelleTX mit new erstellen um erneuten Zugriff darauf zu bekommen, oder ?

    thx sven
    sven



  • Durch das Free(); wird doch dann das Objekt MySchnittstelleTX wieder komplett freigegeben, oder?
    Und ich müste dann ein neuese Objekt von MySchnittstelleTX mit new erstellen um erneuten Zugriff darauf zu bekommen, oder ?

    genau



  • void MySchnittstelleTX::Free(void)
    {
        delete this;
    }
    

    Sinn ? :

    Solche konstrukte nimmt man, wenn man jemanden den zugriff auf den Destruktor nicht direkt erlauben will (macht nur sinn, wenn der destruktur auch private / protected ist) ... Du sollst also die Instanzen dieser klasse frei erzeugen, aber nur bedingt loeschen koennen. Da der destruktur nix wildes macht, ausser dem Standard - delete, will dich damit hier nur wer auf das delete ( und damit new) festnageln .
    Zu deutsch, der Designer der klasse will verhindern dass du Instanzen dieser Klasse aufn Stack anlegst ...

    Ciao ...



  • Die MFC z.B. verwendet das. Dort wird ein CFrameWnd auf dem Heap erstellt. Die Implementierung von PostNcDestroy macht ein

    delete this;
    

    um das Objekt zu löschen, nachdem das Fenster unwiederbringlich gelöscht wurde. Das von Hand zu machen, wäre ziemlich schwierig.


Anmelden zum Antworten