PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GUI "Subobjekte" automatisch löschen oder nicht?


rotalever
2007-06-26, 21:30:37
Hallo,
Ich habe in C++ ein Window Objekt und da sind ein paar Widget Objekte drin.
Das ganze wurde ungefähr so erzeugt:

CWindow * mywindow new CWindow;
CWidget w1;
Cwidget * w2 new Cwidget;
mywindow->add_widget(&w1);
mywindow->add_widget(w2);

Wenn ich jetzt

delete mywindow;

aufrufe ist das Fenster weg, aber die Widgets noch da. Würde ein Benutzer erwarten, dass das Fenster beim Zerstören automatisch alle enthaltenen Widgets löscht? Wenn ja, dann wäre das irgendwie ein Problem, da zwar w2 vom Fenster durch

delete w2;

gelöscht werden könnte, aber bei w1 geht das ja nicht, weil es nicht mit "new" erstellt wurde.

Als Lösung würde mir dazu einfallen, dass CWidget nur über CWindow erstellt werden kann und so CWindow volle Kontrolle hat. Irgendwie so:

CWidget * CWindow::new_widget ()
{
CWidget * w = new CWidget;
this.add_widget (w);
return w;
}

Und im Programm wird dann aus dem "new CWidget" Konstrukt sowas hier:

w1 = mywindow->new_widget ();


Aber irgendwie finde ich diesen Ansatz nicht so dolle. Gibt es andere Möglichkeiten?
Oder ist es vll. Sinnvoll das Löschen der Widgets eher dem Benutzer zu überlassen? Was bevorzugen hier die Benutzer?

rotalever
2007-06-27, 19:41:31
Naja eigentlich eine blöde Frage... Hab einfach mal bei gtkmm geschaut wie das gemacht wird, da wird anscheinend nichts automatisch gelöscht, irgendwie ist das ja auch vernünftiger.