destructor?
-
wenn ich ein Objekt in einer Funktion erzeuge:
obj o;
o.buffer = malloc(...);Nun wird die Funktion beendet. Wie erkenne ich, dass die Daten von malloc freigegeben werden sollen?
in C++ gibt es ja einen destructor, mit dessen Hilfe ich etwa free() aufrufen würde...
-
Automatisch geht das in C gar nicht. Man könnte sich Ctor und Dtor aber mit Hilfe von 2 Funktionen nachbauen:
{ obj o; alloc(&o) ... dealloc(&o); }
-
Es gibt die Funktion atexit:
http://www.cppreference.com/stdother/atexit.html
Hier kannst du eine Callback-Funktion eintragen, die beim Beenden des Programms aufgerufen wird. Da kannst du schonmal Daten löschen.
Ansonsten musst du halt immer genau schauen, wann du Speicher freigeben musst, damit keine Lecks entstehen.
Oder du schreibst dir einen SpeicherManager, der am Ende nicht freigegebenen Speicher automatisch (über atexit) aufräumt.
Generell musst du in C aber selbst entscheiden, wann Daten gelöscht werden müssen.
Die Entscheidung ist ja eigentlich relativ einfach.
rya.
-
naja in C++ kann man inline Objekte erzeugen... (in c ja auch)
etwa:
foo(rect(10,20));
mit rect wäre ein objekt erzeugt... nach funktion-ende wird es in c++ gelöscht... -
so geht es in C nicht - ich such eine Lösung dafür...
-
die antworten wurden doch bereits geschrieben..
-
TSxxx schrieb:
naja in C++ kann man inline Objekte erzeugen... (in c ja auch)
etwa:
foo(rect(10,20));
mit rect wäre ein objekt erzeugt... nach funktion-ende wird es in c++ gelöscht...
Nicht erst nach Funktionsende - sondern direkt nach der Rückkehr aus der foo()
so geht es in C nicht - ich such eine Lösung dafür...
Das Objekt selber wird in C genauso gelöscht wie in C++ - du kannst nur keine Destruktoren definieren, um irgendwelche dynamischen Daten automatisch wieder freizugeben - das mußt du schon von Hand machen.