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

发布于 2024-10-20 17:09:33 字数 688 浏览 4 评论 0原文

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

I'm having memory leak / deleting errors when using MySQL Connector C++ 1.05.

The Connector returns a pointer to a result set from executing query.

I am assigning the pointer to a boost::shared_ptr. The call looks like:

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

Here are my questions:

  1. Who is responsible for deleting the
    allocated result set?
  2. Should I be using scoped_ptr or
    shared_ptr if the results are only
    used within the function?
  3. Is the result valid when another
    query is executed?

I'm using MySQL Connector C++ 1.05, MS Visual Studio 2008 version 9.0.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

俯瞰星空 2024-10-27 17:09:33

1)根据这个示例,你做的一切都是正确的。

如果您使用 shared_ptr 来存储结果,则在您的 shared_ptr 对象超出范围(在您的情况下)/具有不再有实际参考(全球范围内)。

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

3) 我不确定我是否正确理解了问题,但您可以对 Results 执行 .reset 操作,并用新的查询结果填充它。

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

1) According to this example, you're doing everything correct.

If you're using the shared_ptr<X> to store the result, it would be automatically disposed after your shared_ptr object goes out of the scope (in your case) / has no more actual references (speaking globally).

2) It depends, but the most common practice is to use the scoped_ptr, because it's contruction and memory deallocation is much faster and using it explicitly states, that the object is valid for the current scope only.

3) I am not sure I get the question correctly, but you could do .reset action for your Results and fill it with the new query result.

Also, I'm sure that your leaks are from memory allocated somewhere else (could be in the library too). You might not be deleting something connector-related, see the docs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文