MainWidget mit oder ohne Pointer

Alles rund um die Programmierung mit Qt
Massimo B.
Beiträge: 45
Registriert: 14. Juni 2006 11:05
Wohnort: Bonn, Germany

Beitrag von Massimo B. »

Hm, nicht ganz verständlich:
  • Dein 1. Punkt:
    das my_test zugrundeliegende QObject zerstört zunächst automatisch my_button, da my_button per addWidget() dort eingehängt wurde.
    Das wird von Qt erledigt, wegen der Parent-Child Beziehung?
  • Dein 2. Punkt:
    anschließend gibt der Destruktor ~Test() den gesamten Speicherbereich der Instanz frei, inkl. dem Bereich, den my_test belegt hatte - obwohl my_test bereits tot ist!
    Das wird von C++ erledigt? Da der Member statisch war, wird er auch vom Standard DTor zerstört? Somit käme sich Qt und C++ hier in die Quere.
    Mit einem dynam. Member würde der Standard DTor nichts tun, deshalb muß man sich ja auch selbst um die Freigabe kümmern?
Ganz nebenbei verstehe ich Qt auch nicht ganz: Qt könnte z.B. nur dyn. Objekte aufräumen, da C++ das bei statischen selbst tut. Oder man nimmt nur statische Member, und läßt den Aufräumvorgang weg, was aber die Übergaben schwieriger macht.
..aber egal.

Also wäre dein Tip, damit der Qt Garbage Collector sauber funktioniert, nur dynamische Member zu verwenden?
Gentoo (x86,ppc), KDevelop, Qt3, Qt4
OscarWild
Beiträge: 54
Registriert: 19. Juni 2006 19:59

Beitrag von OscarWild »

paoleela hat geschrieben:1. Punkt: Das wird von Qt erledigt, wegen der Parent-Child Beziehung?
2. Punkt: Das wird von C++ erledigt? Da der Member statisch war, wird er auch vom Standard DTor zerstört? Somit käme sich Qt und C++ hier in die Quere.
Mit einem dynam. Member würde der Standard DTor nichts tun, deshalb muß man sich ja auch selbst um die Freigabe kümmern?
Exakt!
paoleela hat geschrieben:Ganz nebenbei verstehe ich Qt auch nicht ganz: Qt könnte z.B. nur dyn. Objekte aufräumen, da C++ das bei statischen selbst tut.
Woher soll Qt wissen, ob das Objekt statisch oder dynamisch erzeugt wurde? Zudem hängen ja in der Regel nicht nur eine Ebene von Kindobjekten an einem Parent, sondern mehrere. Wie sollte Qt einen solchen Baum sinnvollerweise zerstören, wenn dort ggf. kunterbunt gemischt statische und dynamische Objekte hängen?
paoleela hat geschrieben:Oder man nimmt nur statische Member, und läßt den Aufräumvorgang weg
Man kann den Aufräumvorgang nicht einfach "weglassen" - er ist elementarer Bestandteil eines QObject.
paoleela hat geschrieben:Also wäre dein Tip, damit der Qt Garbage Collector sauber funktioniert, nur dynamische Member zu verwenden?
Genau - so verlangt es das Konzept, das einem dafür das Leben enorm vereinfacht (allerdings ist der Begriff "Garbage Collector" dafür etwas hochgegriffen). Trolltech sollte das aber evtl. in der Doku bzw. im Tutorial mal ausführlicher erklären - offensichtlich besteht hier Bedarf.
Antworten