开发者

Who owns memory returned by MySQL Connector C++?

开发者 https://www.devze.com 2023-02-15 08:06 出处:网络
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'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.


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消