Speicherplatz freigeben
-
Hallo,
gibt es eine Möglichkeit in Borland C++ den Speicherplatz für alle Variablen wieder freizugeben. Natürlich nur "alle" Variablen die ich so deklariere:
Klasseninstanz_[Zaehler] = new Klassenname;So eine Art clear all() wie in VFP?
Grüße
-
Verschoben nach "C++".
-
Soweit mir bekannt nicht.
Du kannst aber Deinen Quelltext parsen und die Namen Dir die Namen der Variablen merken und sie dann über eine separate Funktion löschen. Dies ist aber sehr aufwendig und lohnt meist nicht.Ich halte mir die Variablen immer in einer Struktur oder Klasse und versuche den Rest mit Pointern zuerledigen. Dann muß ich nur mit einer Funktion die Struktur löschen.
-
Nutze doch std::auto_ptr, die werden autmatisch gelöscht...
-
du kannst das mit einer Hilfsklasse zum memory management machen
#include <vector> #include <iostream> class mem_manager { typedef void (*free_t)(void*); struct mmemory { free_t callback; void *memory; }; std::vector<mmemory> mmemorys; template<typename T> static void free(void *mem) { delete static_cast<T*>(mem); } public: ~mem_manager() { free_all(); } void free_all(); template<typename T> void add(T *mem); }; void mem_manager::free_all() { for(std::vector<mmemory>::iterator i=mmemorys.begin(); i!=mmemorys.end(); ++i) { i->callback(i->memory); mmemorys.erase(i); } } template<typename T> void mem_manager::add(T *ptr) { mmemory mem; mem.callback=free<T>; mem.memory=ptr; mmemorys.push_back(mem); } struct foo { foo() { std::cerr << "foo()" << std::endl; } ~foo() { std::cerr << "~foo()" << std::endl; } }; int main() { mem_manager manage; foo *ptr=new foo; manage.add(ptr); //... //am ende wird free_all im dtor aufgerufen //manage.free_all(); }
mem_manager kannst du natuerlich auch gut als singleton schreiben.
-
Danke, ist aber wirklich nicht unkompliziert. Während VFP dafür einen Befehl hat, braucht das liebe alte C++ gleich ne ganze Klasse...
-
Giovanni schrieb:
Während VFP dafür einen Befehl hat, braucht das liebe alte C++ gleich ne ganze Klasse...
Das hat nichts mit "alt" zu tun, und C++ "braucht" das auch nicht, sondern du. Und wenn du so eine Funktion brauchst, solltest du bei VFP bleiben (was immer das ist).
IMHO.
-
MFK schrieb:
Und wenn du so eine Funktion brauchst, solltest du bei VFP bleiben (was immer das ist).
Visual FoxPro?