1

当我调用 executeAndWait 并且刚刚返回回复时,我看到堆中的内存增加了 76KB。我不知道为什么会这样。如何清理这段内存?我与 db 的连接创建如下,

bool DBHelper::checkConnection(bool isAsynch)
{
    if(sqlConnector && dbFile->exists())
    {
        return true;
    }
    if (dbFile->exists())
    {
    sqlConnector = new SqlConnection(dbPath, "connect");
    connect(sqlConnector, SIGNAL(reply(const bb::data::DataAccessReply&)), this,
            SLOT(onLoadAsyncResultData(const bb::data::DataAccessReply&)));
    return true;
    }    
    return false;
}

对 executeAndWait 的调用在这个函数中,

void DBHelper::execute (const QVariant &criteria,int id,bool isAsynch)
{
    if (checkConnection(isAsynch))
    {
        if(!isAsynch)
        {
            DataAccessReply reply= sqlConnector->executeAndWait(criteria, id); // memory leak happens when the reply is found.
        this->onLoadSynchResultData(reply);
        }

    }
}

文档链接在这里。

谢谢。

4

1 回答 1

1

您确定这是内存泄漏而不是DataAccessReply类的某种内部机制吗?您是否尝试过使用 valgrind 或其他类似工具对其进行检查?

从您的使用分配new和随后的分配中,我认为 of 的类型sqlConnector是指向某物的指针。虽然它可能不是您正在寻找的解决方案,但我建议使用一些智能指针类型,因为它们总是更防漏。

如果有兴趣,请根据您可用的内容查看例如boost::shared_ptr或 C++11 。std::shared_ptr

if(sqlConnector)另外(在这里称我为迂腐),即使它可能通过隐式转换完成您所期望的操作,我也不会使用。我会明确地使用if(sqlConnector != NULL)(或类似的东西)并仔细检查sqlConnector(也明确地)正确初始化。

于 2013-09-15T17:17:53.193 回答