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?
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?