使用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;
}
以下是我的问题:
scoped_ptr
还是
shared_ptr
如果结果只是
在函数中使用?我正在使用MySQL Connector C ++ 1.05,MS Visual Studio 2008版本9.0。
答案 0 :(得分:1)
1)根据this例子,你做的一切都是正确的。
如果您使用shared_ptr<X>
来存储结果,那么在您的shared_ptr
对象超出范围(在您的情况下)/没有更多实际参考(说话)后它会自动处理全局)。
2)这取决于,但最常见的做法是使用scoped_ptr
,因为它的构造和内存释放要快得多,并使用它明确说明,该对象对当前作用域有效仅
3)我不确定我是否正确提出了问题,但您可以对.reset
执行Results
操作,并将其填入新的查询结果中。
另外,我确信您的泄漏来自其他地方分配的内存(也可能在库中)。您可能没有删除与连接器相关的内容,请参阅文档。