gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:22:42 24 4
gpt4 key购买 nike

我在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com