Ich bin ziemlich neu in Qt und wundere mich über einige grundlegende Dinge mit Speicherverwaltung und dem Leben von Objekten. Wann muss ich meine Objekte löschen und / oder zerstören? Wird dies automatisch erledigt?
Welche der von mir erstellten Objekte muss ich im folgenden Beispiel löschen? Was passiert mit der Instanzvariablen, myOtherClass
wenn sie myClass
zerstört wird? Was passiert, wenn ich meine Objekte überhaupt nicht lösche (oder zerstöre)? Wird das ein Problem für das Gedächtnis sein?
MyClass.h
class MyClass
{
public:
MyClass();
~MyClass();
MyOtherClass *myOtherClass;
};
MyClass.cpp
MyClass::MyClass() {
myOtherClass = new MyOtherClass();
MyOtherClass myOtherClass2;
QString myString = "Hello";
}
Wie Sie sehen, ist dies ein ziemlich einfaches Zeug für Anfänger, aber wo kann ich auf einfache Weise davon erfahren?
(It does this by issuing signals, so it is safe even when you delete child manually before the parent.)
-> Dies ist nicht der Grund, warum es sicher ist. In Qt 4.7.4 werden QObject-Kinder direkt gelöscht (viadelete
, siehe qobject.cpp, Zeile 1955). Der Grund, warum es sicher ist, untergeordnete Objekte zuerst zu löschen, besteht darin, dass ein QObject sein übergeordnetes Objekt anweist, es zu vergessen, wenn es gelöscht wird.