谁拥有MySQL Connector C ++返回的内存?

时间:2011-03-06 21:03:03

标签: c++ mysql memory-management shared-ptr mysql-connector

使用MySQL Connector C ++ 1.05时出现内存泄漏/删除错误。

Connector从执行查询返回指向结果集的指针。

我正在指向boost::shared_ptr。电话看起来像:

std::string query_text;
query_text = /* ... */;
boost::shared_ptr<sql::Statement> query(p_db_connection->createStatement());
if (!query)
{
    return;
}
boost::shared_ptr<sql::ResultSet>  query_results(query->executeQuery(query_text));
if (!query_results->next())
{
    return;
}

以下是我的问题:

  1. 谁负责删除 分配结果集?
  2. 我应该使用scoped_ptr还是 shared_ptr如果结果只是 在函数中使用?
  3. 另一个结果是否有效 查询是执行的吗?
  4. 我正在使用MySQL Connector C ++ 1.05,MS Visual Studio 2008版本9.0。

1 个答案:

答案 0 :(得分:1)

1)根据this例子,你做的一切都是正确的。

如果您使用shared_ptr<X>来存储结果,那么在您的shared_ptr对象超出范围(在您的情况下)/没有更多实际参考(说话)后它会自动处理全局)。

2)这取决于,但最常见的做法是使用scoped_ptr,因为它的构造和内存释放要快得多,并使用它明确说明,该对象对当前作用域有效仅

3)我不确定我是否正确提出了问题,但您可以对.reset执行Results操作,并将其填入新的查询结果中。

另外,我确信您的泄漏来自其他地方分配的内存(也可能在库中)。您可能没有删除与连接器相关的内容,请参阅文档。