簡體   English   中英

在sqlite3中使用shared_ptr

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM