"delete this" im Konstruktor



  • Ist soetwas eigentlich erlaubt (siehe Betreff)?
    Mein Problem ist, dass ich im Konstruktorblock eine Funktion aufrufe, die über's Netzwerk einem Server (sowas ähnliches wie ein ORB) mitteilt, dass ein Objekt vom Typ X erstellt wurde und so weiter und so fort.
    Unter Umständen quittiert der Server dies mit dem Kommando "löchen", wodurch die Funktion das Objekt wieder löscht.
    "Funktionieren" tut es, aber das heisst ja nix 😉
    Aus meinem logischen Empfinden würde ich sagen, dass gegen diese Vorgehensweise nichts spricht, zwar ist der Pointer ptr

    ptr = new So_eine_Klasse();
    

    dann zwar schon nicht mehr gültig, aber den würde ich auch nicht verwenden. Das Objekt wurde ja bereits vollständig erstellt, wenn der "Block" im Konstruktor ausgeführt wird.

    Weiss also jemand, ob das Vorgehen erlaubt ist (also nicht nur bei meinem Compiler oder mienem OS funktioniert)?

    Danke,
    Wischmop



  • IMHO geht das, aber nur, wenn du sicherstellen kannst, dass dein Objekt immer über new erstellt wird, und dass nach delete this kein Zugriff mehr auf das Objekt erfolgt.



  • IMHO geht das, aber nur, wenn du sicherstellen kannst, dass dein Objekt immer über new erstellt wird, und dass nach delete this kein Zugriff mehr auf das Objekt erfolgt.

    Das sind zwei zu erfüllenden Bedingungen.
    Die restlichen findest du hier: http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.14
    http://cpptips.hyperformix.com/cpptips/delete_this http://cpptips.hyperformix.com/cpptips/delete_this2



  • Danke, die 3 Links habe ich mir dazu auch durchgelesen, allerdings frage ich mich, was mit "üblichen Einsprüchen bzgl. nicht virtueller Distruktoren" gemeint ist (der ersten Link)? In Meinem Fall habe ich einen >virtuellen< Distruktor, der noch einiges macht. Ansonsten habe ich (denke ich!) alle Punkte erfüllt.

    Aber ein "normaler virtueller Distruktor", der ja auch sonst funktioniert, sollte hier doch keine Probleme machen, oder doch?


Anmelden zum Antworten