Dynamische VCL-Objekte automatisch freigeben
-
Hi,
ich verwende in meinen Methoden lokale Objekte, die ich wie folg deklariere:
TADOQuery *ADOQuery = new TADOQuery(NULL);
Befindet sich so ein Objekt auf dem Form, würde es bei dem Freigeben des Forms automatisch mit freigegeben. Was ist aber in meiner Methode? Die gehört zu einer selbstdefinierten Klasse, wird das Objekt bei Methodenende automatisch freigegeben, muss ich das explizit tun oder gibt es einen Trick mit dem das automatisch passiert?
Hintergrund ist: es gibt diverse Ausstiegsmöglichkeiten aus der Methode (return). Ich müsste entweder eine zusätzliche Variable und mehr Verschachtelungen einfügen oder aber an jedem Ausstieg alle dynamischen Objekte freigeben. Das muss doch einfacher gehen, oder?
-
Hallo
Heimelchen schrieb:
wird das Objekt bei Methodenende automatisch freigegeben
Nein
muss ich das explizit tun
Ja
oder gibt es einen Trick mit dem das automatisch passiert?
Solange diese Instanz nur in der Methode gebraucht wird, kannst du immer noch Smartpointer einsetzen, konkret std::auto_ptr
#include <memory> ... { std::auto_ptr<TADOQuery> ADOQuery(new TADOQuery(NULL)); // Jetzt sorgt auto_ptr dafür, das die ADOQuery-Instanz nach dem Verlassen des Gültigkeitsbereiches // (in deinem Fall die Methode selber) auf jedenfall gelöscht wird, egal // wie und wann der Bereich verlassen wird (auch bei einer Exception) while (!ADOQuery->Eof) // ADOQuery kannst du wie einen normalen Zeiger verwenden ... }
bis bald
akari/Edit : auto_ptr im Quellcode korrigiert
-
Für die Nachwelt: im Code muss es auch auto_ptr heißen.
Das hört sich gut an, auch wenn ich auf ne schönere Schreibweise gehofft hab. Aber man kann ja nicht alles haben...