[英]Using shared_ptr with sqlite3
我正在嘗試使用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); 但是這種功能沒有官方文檔或任何示例。
我好被困,非常感謝
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 ++做法會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.