Im Destruktor eine Memberfunktion der zu zerstörenden Klasse aufrufen?



  • Ja spar dir dein Kommentar hier gibt es kein reines C++ Forum und
    „Managed“ C verkneife ich mir so langes geht (das nur am Rande).



  • BILL schrieb:

    Ja spar dir dein Kommentar hier gibt es kein reines C++ Forum

    ?????



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Kann ich im Destruktor noch auf Memberfunktionen der Klasse zugreifen?

    klar



  • BILL schrieb:

    Nun ist mir nicht ganz klar wann der Destruktor aufgerufen wird.

    Sobald das Objekt seine "gültigkeit" verliert (bei lokalen Objekten z.B. beim Verlassen der Funktion) oder wenn du es per delete löscht (bei dynamisch angelegten Objekten).



  • Im Destruktor kannst du ganz normal Methoden aufrufen. Der Speicher wird ja erst nach der Ausführung des Destruktors gelöscht.



  • Jo Danke ,
    ihr seit spitze



  • Jochen Kalmbach schrieb:

    Was für ein Destruktor??? In der Managed-Wolrd gibt es keine Destruktoren... nur Finalizer...

    Das ist IMHO nicht völlig korrekt. Für andere Resourcen als Speicher setzt man größtenteils auf deterministische Destruktion. Aus Sicht der CLR wird das meistens erledigt, indem man Dispose() implementiert. Für C++/CLI ist Dispose() dann auch gleichzeitig der C++-Destruktor.



  • Phoemuex schrieb:

    Im Destruktor kannst du ganz normal Methoden aufrufen. Der Speicher wird ja erst nach der Ausführung des Destruktors gelöscht.

    Dazu vielleicht kleine Einschränkung: Du darfst schon Methoden aufrufen, aber Du solltest darauf achten keine virtuellen Methoden aufzurufen. Denn diese könnten versuchen auf eine bereits zerstörte Unterklasse zuzugreifen.


  • Mod

    Jester schrieb:

    Phoemuex schrieb:

    Im Destruktor kannst du ganz normal Methoden aufrufen. Der Speicher wird ja erst nach der Ausführung des Destruktors gelöscht.

    Dazu vielleicht kleine Einschränkung: Du darfst schon Methoden aufrufen, aber Du solltest darauf achten keine virtuellen Methoden aufzurufen. Denn diese könnten versuchen auf eine bereits zerstörte Unterklasse zuzugreifen.

    der rat ist richtig, die begründung nicht ganz. wärend der ausführung des destruktors einer basisklasse ist das objekt selbst nur noch eine instanz der basisklasse. ein virtueller aufruf wird also die implementation der basisklasse aufrufen (und das würde z.b. ein problem sein, wenn diese funktion in der basisklasse rein virtuell ist und keine implementation hat). das verhalten ist spiegelbildlich zu dem im konstruktor. virtuelle aufrufe aus dem konstruktor oder destruktor heraus können stets statisch aufgelöst werden (evtl. abgesehen von virtuellen funktionen einer virtuellen basisklasse, die nicht überschrieben wurde).



  • Ups, aha. Dann mal danke für die Korrektur! Wieder was gelernt. 🙂


Anmelden zum Antworten