Выполнение SqlConnection executeAndWait вызывает утечку памяти на BB10

Когда я вызываю executeAndWait и только когда возвращается ответ, я вижу увеличение объема памяти в 76 КБ. Я не знаю, почему это происходит. Как мне почистить эту память? Мое создание соединения с БД следующее,

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);
}

}
}

Ссылка на документацию находится в Вот.

Благодарю.

1

Решение

Вы уверены, что это утечка памяти, а не какой-то внутренний механизм DataAccessReply учебный класс? Вы пытались взломать его с помощью Valgrind или подобного инструмента?

Из вашего распределения с помощью new и последующее назначение я предполагаю тип sqlConnector это указатель на что-то. Хотя это может быть не то решение, которое вы ищете, я рекомендую использовать некоторые интеллектуальные указатели, так как они всегда более герметичны.

Если интересно, см. Эл. г. boost::shared_ptr или C ++ 11 std::shared_ptr в соответствии с тем, что доступно для вас.

Также (назовите меня педантичным здесь), я бы не использовал if(sqlConnector) даже если он может делать то, что вы ожидаете от неявного приведения. Я бы явно использовал if(sqlConnector != NULL) (или что-то подобное) и двойная проверка sqlConnector получает (также явно) инициализируется правильно.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]