首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wt 3内存释放

Wt 3内存释放
EN

Stack Overflow用户
提问于 2017-12-14 16:24:52
回答 2查看 75关注 0票数 0

大多数情况下,在wt3中很清楚内存被释放的位置(在wt4中非常明确),但在这种情况下,我不理解其中的逻辑。

下面的函数内容为我的wt3应用程序设置了一个容器。一切正常,但是谁能解释一下返回的_content是如何(或者应该)处理的?

_content作为私有类数据保存。

代码语言:javascript
复制
Wt::WContainerWidget* _content;

函数content()处理容器

代码语言:javascript
复制
Wt::WContainerWidget* web::content() 
{
    if (_content == 0) {
       _content = new Wt::WContainerWidget(root()); //memory allocation
    }
    return _content; //allocated memory gets returned
}

稍后,它的用法如下:

代码语言:javascript
复制
void web::sayhi()
{
    content()->addWidget(new Wt::WBreak());
    content()->addWidget(new Wt::WText("hello world"));
}

这应该如何删除/处理content()返回的已分配内存

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-08 17:23:50

如果使用这种形式的构造函数:

代码语言:javascript
复制
_content = new Wt::WContainerWidget(root());

然后将小部件作为子部件添加到root(),因此它归root()所有。在这种情况下,_content实际上是不拥有的。

因此,当WApplication被销毁时,root()root()的每个子级也将被销毁。

这相当于在Wt 4中这样做:

代码语言:javascript
复制
_content = root()->addWidget(std::make_unique<Wt::WContainerWidget>());

或更短(从Wt 4.0.1开始):

代码语言:javascript
复制
_content = root()->addNew<Wt::WContainerWidget>();
票数 3
EN

Stack Overflow用户

发布于 2017-12-14 16:42:54

您应该将内容存储为按值存储的变量成员,而不是指针。如果您必须将内容作为指针保存,那么您可能需要探索智能指针(std::unique_ptr或std::shared_ptr)的用法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47808837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档