简体   繁体   中英

Using shared_ptr with sqlite3

I am trying to use shared_ptr to protect the memory leaks that the sqlite3 library is throwing in my application.

I need to translate my plain c++ code to a protected version without doing a huge change. The current state of my code is something like:

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

And I have tried:

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

But I can not translate the open function because it is requesting a sqlite3** parameter that I am not able to emulate with a shared pointer. I have found std::shared_ptr connection(rawConnec, sqlite3_close); but this kind of function have not official documentation or any of example.

I am so blocked, Thank you so much

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

Then once db and all other std::shared_ptr s go out of scope sqlite3_close will be called on your resource.

However this is a bit of a hack and in the long run you will be much better off with a standard RAII class as is standard C++ practice.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM