Hatte natürlich meine Objekte nicht deleted.
Nun die Frage, was muss ich denn alles deleten?
Alles, was explizit nicht auf dem Stack, also mit new angelegt wurde.
//// 1. ////
Auch Objekte, die lokal innerhalb einer Methode mit new erzeugt wurden?
Klar. Mit new legst du ein Objekt auf dem Heap an. Du musst es von dort
auch selber wieder löschen.
void Test()
{
MyClass *mc = new MyClass();// [...]
delete mc; // ????
}
Ja.
//// 2. ////
Oder Objekte, die Eigenschaften einer Klasse sind?
Wenn du sie mit new anlegst -- ja. Wenn du sie nicht per new
anlegst -- nein. Grob gesagt, alles, was ein Pointer ist, muss auch wieder
gelöscht werden.
class MyClass
{
MyClass2 *mc;
};void MyClass::Methode()
{
mc->myMethod();
}
MyClass::~MyClass()
{
delete mc; // ???????
}
Ja, da Pointer.
//// 3. ////
Objekte die NICHT als Referenz angelegt wurden?
void Method()
{
MyClass mc;
mc.Method();// delete mc; ?????
}
Nein, kein Pointer, passiert automatisch.
Objekte, die Eigenschaften einer Klasse sind, aber nicht als Referenz
angelegt sind.
class MyClass
{
MyClass2 mc2;
};
Nein, kein Pointer, passiert automatisch.