我正在尝试使用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); 但是这种功能没有官方文档或任何示例。
我被封锁了,非常感谢你
答案 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 ++实践更好。