通常情况下,内存在wt 3中的释放是很明显的(wt 4中是非常明确的),但是在这种情况下,我不了解其逻辑。
以下函数内容为我的wt 3应用程序设置了一个容器。一切正常,但没有人能解释返回的_content(或应该如何处理)吗?
_content保留为私有类数据。
Wt::WContainerWidget* _content;
函数content()处理容器
Wt::WContainerWidget* web::content()
{
if (_content == 0) {
_content = new Wt::WContainerWidget(root()); //memory allocation
}
return _content; //allocated memory gets returned
}
后来这样使用:
void web::sayhi()
{
content()->addWidget(new Wt::WBreak());
content()->addWidget(new Wt::WText("hello world"));
}
这应该如何删除/处理由content()返回的分配的内存
最佳答案
如果使用此形式的构造函数:
_content = new Wt::WContainerWidget(root());
然后将小部件作为子级添加到
root()
,因此它由root()
拥有。在这种情况下,_content
实际上是没有所有权的。因此,当
WApplication
被销毁时,root()
和root()
的每个子级都将随之销毁。这等效于在Wt 4中执行此操作:
_content = root()->addWidget(std::make_unique<Wt::WContainerWidget>());
或更短(自Wt 4.0.1起):
_content = root()->addNew<Wt::WContainerWidget>();
关于c++ - Wt 3内存释放,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47808837/