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

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

我在使用 MySQL Connector C++ 1.05 时遇到内存泄漏/删除错误。

连接器返回一个指向执行查询的结果集的指针。

我正在将指针分配给 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. 另一个结果是否有效 查询执行了吗?

我使用的是 MySQL Connector C++ 1.05,MS Visual Studio 2008 9.0 版。

最佳答案

1) 根据this例如,您所做的一切都是正确的。

如果您使用的是 shared_ptr<X>存储结果,它会在你的 shared_ptr 之后自动处理。对象超出范围(在您的情况下)/没有更多实际引用(在全局范围内发言)。

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

3) 我不确定我是否正确回答了问题,但你可以做 .reset为您采取行动Results并用新的查询结果填充它。

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

关于c++ - 谁拥有 MySQL Connector C++ 返回的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5213388/

相关文章:

c++ - 在 C++ 中正确使用堆栈和堆?

php - 标题 php 不起作用

c - 在 C 中为 char*[64] 分配(和取消分配)内存

即使使用 ifndef,C++ 重定义错误

c++ - 寻找最佳颜色匹配 - 如果没有可用的颜色阴影则拒绝

c++ - MySQL C++/Connector setClientOption 支持多语句

mysql - 使用 session 变量时如何在存储过程中运行此查询

python-2.7 - 在创建带有借位= True的Theano共享变量时内存不足

c++ - (ODR 使用问题)不同文件中同名结构的 priority_queue

c++ - 我有一个关于将 std::array 传递给函数的问题