通常情况下,内存在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/

10-15 01:05