将shared_ptr与sqlite3一起使用

时间:2014-11-10 10:48:06

标签: c++ sqlite shared-ptr

我正在尝试使用shared_ptr来保护sqlite3库在我的应用程序中抛出的内存泄漏。

我需要将我的普通c ++代码翻译成受保护的版本而不做大的改动。我的代码的当前状态如下:

sqlite3* db = NULL;
sqlite3_open(dbname.c_str(),   &db );
sqlite3_close( db );

我试过了:

std::shared_ptr<sqlite3> db(NULL);
sqlite3_close( db.get() );

但是我无法翻译open函数,因为它正在请求一个我无法用共享指针模拟的sqlite3 **参数。 我已经找到     std :: shared_ptr连接(rawConnec,sqlite3_close); 但是这种功能没有官方文档或任何示例。

我被封锁了,非常感谢你

1 个答案:

答案 0 :(得分:1)

std::shared_ptr<sqlite3> db(nullptr);
{
  sqlite3* dbPtr = NULL;
  sqlite3_open(dbname.c_str(),   &dbPtr );
  db.reset(dpPtr, sqlite3_close);
}

然后,一旦db和所有其他std::shared_ptr超出范围sqlite3_close,您的资源就会被调用。

然而,这有点像黑客攻击,从长远来看,使用标准RAII类会比标准C ++实践更好。