Meistens ist klar, wo Speicher in WT 3 freigegeben ist (sehr explizit in WT 4), aber in diesem Fall verstehe ich die Logik nicht.Wt 3 Speicherfreigabe
Der folgende Funktionsinhalt setzt einen Container für meine wt 3-Anwendung. Alles funktioniert gut, aber könnte irgendjemand erklären, wie man (oder sollte das) zurückkommen soll?
_content wird als private Klassendaten gespeichert.
Wt::WContainerWidget* _content;
Funktionsinhalt() Griffe Behälter
Wt::WContainerWidget* web::content()
{
if (_content == 0) {
_content = new Wt::WContainerWidget(root()); //memory allocation
}
return _content; //allocated memory gets returned
}
später wird diese verwendet wie:
void web::sayhi()
{
content()->addWidget(new Wt::WBreak());
content()->addWidget(new Wt::WText("hello world"));
}
Wie dies durch Inhalt zurückzugewiesenen Speicher löschen/handhaben ist annehmen()
Ich dachte so eine Zauberei geht weiter, vielen Dank. Ich verstehe nicht wirklich, wie root() das so übernehmen kann :( – Levi
Im Konstruktor von 'WWebWidget' und' WCompositeWidget' wird 'parent-> addWidget (this)' aufgerufen. Dies erfordert sorgfältige Programmierung, obwohl 'this' zu diesem Zeitpunkt immer noch ein 'WWebWidget' oder' WCompositeWidget' anstelle eines bestimmten Widgets ist, sollte sich 'addWidget' nicht auf irgendwelche speziellen Eigenschaften des konkreten Widgets verlassen. Wegen der auftretenden Probleme Aus diesem Grund und weil es nicht mit der Verwendung von "unique_ptr" kompatibel ist, ist dies in Wt 4 nicht mehr möglich. – RockinRoel