Destruktor Aufruf / Garbage Collector
-
Servus,
so wie alle Anfänger habe auch ich eine dumme Frage: Ich habe mir eine Klasse gebastelt in welcher ich einen IO Port öffnen und schließen kann. Um das zu verienfachen und die einzelnen Aufrufe wegzubekommen habe ich mir gedacht, dass ich die Open Funkltion in den Konstruktor und die close in den destruktor einbette.
Konstruktor wird selbstverständlich beim erzuegen des objektes aufgerufen, ABER ich dachte das der gc den destruktor spätestens beim beenden des kompletten programmes aufruft -> Nee macht er nicht, kann mir jemand weiterhelfen?
Ich dachte der gc gibt den Speicher, frei sobald der Scope verlassen wird und er diesen Speicherplatz anderweitig benöigt oder umsortiert, spätestens aber am Programmende komplett alle objekte löscht?
Vielen Dank schonmal, Grüße Falk
-
Könnte ein wenig weiterhelfen:
https://www.c-plusplus.net/forum/p1724776#1724776
-
Vielen Dank Simon, tolle Beiträge die du schreibst, soweit ich folgen kann super verständlich.
Ich werde mir das ganze noch genau durchlesen, finde ich echt interessant.
Aber noch eine kurze Frage vorab: Meine C++/CLI Klasse erbt von einer unmanaged Klasse, welche ich aus einer .dll lade die mittels resources eingebunden ist.
Ich rufe dann zwar methoden der Basisklasse auf, aber erstelle keine Objekte, außer eben jenem von meiner abgeleiteten Klasse. Muss ich hier auch Dispose beachten?
Das Objekt der abgeleiteten Klasse ist ja eigetnlich vom gc verwaltet. Ich habe bis jetzt lediglich die ~ClassName() und !ClassName() explizit implementiert und rufe im finalizer meine close Funktion auf. Mit ~ClassName() ist ja die IDisposable Schnittstelle schon automatisch eingebunden.Vielen Dank nochmal