当我调用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);
        }

    }
}

文档链接位于here.

谢谢。

最佳答案

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

通过使用new进行分配并进行后续赋值,我认为sqlConnector的类型是指向某物的指针。尽管这可能不是您要寻找的解决方案,但我还是建议您使用一些智能指针类型,因为它们总是更防泄漏。

如果有兴趣,请参阅e。 G。 boost::shared_ptr 或C++ 11 std::shared_ptr ,具体取决于可用的内容。

另外(在这里叫我pedantic)我不会使用if(sqlConnector),即使它可能正在执行隐式强制转换所期望的操作。我会明确使用if(sqlConnector != NULL)(或类似的东西),并仔细检查sqlConnector得到(也明确地)初始化。

10-02 00:54