new And delete
-
Wenn ich eine neue Instanz einer Klasse erstell, "bla = new Bla", MUSS ich den Destruktor aufrufen um den Speicher wieder freizugeben oder tuts dies automatisch in C++?
-
Weder noch. Du musst delete benutzen.
-
Man ruft den Destruktor nicht auf. Er wird aufgerufen, wenn man delete benutzt, oder das Objekt auf dem Stack angelegt wird und der Scope (Gültigkeitsbereich) verlassen wird:
#include <iostream> using namespace std; class foo { public: ~foo() { cout << "Destruktor!" << endl; } }; void bar() { foo f; } int main() { foo *f = new foo(); delete f; bar(); cin.get(); }
-
Danke für die Antworten.
Ich erstell meine Instanz so:
vor_person = new VOR_Person(oid)
Ich greif so auf sie zu z.B:
vor_person.update()->name(name);
wenn ich jetzt:
delete vor_person;
versuche, schimpft der Compiler vonwegen, delete wäre nur für zeiger oder sowas:
type `class PRef<VOR_Person>' argument given to `delete', expected pointerWhat am I doing wrong?
-
So wie es aussieht, benutzt du eine Art Verwaltungsklasse für Zeiger. Wahrscheinlich kümmert sich diese selber um das delete. Wenn du Zugriff auf den Quelltext von PRef hast, dann schau dir mal den Destruktor an. Beispiel:
#include <iostream> using namespace std; template<typename T> class ZeigerVerwalter { T *m_zeiger; public: ZeigerVerwalter(T *zeiger) : m_zeiger(zeiger) { } ~ZeigerVerwalter() { delete m_zeiger; cout << "Destruktor!" << endl; } }; void test() { ZeigerVerwalter<int> i = new int(); } int main() { test(); cin.get(); }