首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wt是否正在泄漏内存?

Wt是否正在泄漏内存?
EN

Stack Overflow用户
提问于 2020-04-09 23:12:39
回答 1查看 94关注 0票数 2

我刚开始使用Wt,程序使用的内存似乎在不断增加(如Ubuntu上的系统监视器所示)。这发生在许多不同的上下文中,尽管析构函数会被调用。

我的猜测是Wt保留了一些数据的副本,我想知道是否有办法强制Wt释放这些内存。

最简单的例子(附在下面)是一个应用程序,它创建/删除一个带有巨大字符串的WText。多次调用创建/删除插槽会导致内存不断增加。为了好玩,我添加了两个按钮,它们可以在浏览器中调用这些插槽。

以下是代码

代码语言:javascript
复制
#include <Wt/WApplication.h>
#include <Wt/WBreak.h>
#include <Wt/WContainerWidget.h>
#include <Wt/WPushButton.h>
#include <Wt/WText.h>

using namespace Wt;
class App: public Wt::WApplication
{
public:
    App(const Wt::WEnvironment& env);
private:
    static std::string  createHugeString();

    void createWText()
    { if(!m_widgetPtr)
        m_widgetPtr=this->root()->addNew<Wt::WText>(createHugeString());
    }

    void deleteWText()
    {  if(m_widgetPtr)
         auto uptr=root()->removeChild(m_widgetPtr);
         // will be deleted by unique_ptr dtor
       m_widgetPtr=nullptr;
    }

    Wt::WWidget *m_widgetPtr = nullptr;
};


App::App(const Wt::WEnvironment& env)
    :Wt::WApplication(env)
{
    auto *createTextButtonPtr = root()->addNew<WPushButton>("Create WText");
    auto *delTextButtonPtr = root()->addNew<WPushButton>("Delete WText");
    root()->addNew<WBreak>();

    createTextButtonPtr->clicked().connect(this,&App::createWText);
    delTextButtonPtr->clicked().connect(this,&App::deleteWText);
} //constructor


std::string App::createHugeString()
{
    std::string htmlStr;
    for(std::size_t i =0; i!=20000000/4; ++i){
        htmlStr += "a b ";
    }
    return htmlStr;
}


int main()
{
    char* argv[]= {"progname", "--docroot", "." ,
                   "--http-address", "0.0.0.0",
                   "--http-port", "8080"
                   };
    int argc = sizeof(argv)/sizeof(*argv);

    return Wt::WRun(argc, argv, [](const Wt::WEnvironment& env) {
      return std::make_unique<App>(env);
    });
}
EN

回答 1

Stack Overflow用户

发布于 2020-04-09 23:18:11

createHugeString()可能会增加内存使用量,即使没有泄漏也是如此:您会将内存碎片。

对于htmlStrreserve正确的维度应该避免一些碎片。

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

https://stackoverflow.com/questions/61124399

复制
相关文章

相似问题

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