Я создал следующий класс для sqlite3 связи:RAII и назначение
class SqliteConnection
{
public:
sqlite3* native;
SqliteConnection (std::string path){
sqlite3_open_v2 (path.c_str(), &native, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
}
~SqliteConnection(){
sqlite3_close(native);
}
}
, а затем можно инициализировать соединение следующим образом
SqliteConnection conn("./database.db");
Однако, я хотел бы иметь возможность поделиться этим соединение, сохранить его как члена в классах и т. д., и проблема связана с оператором присваивания по умолчанию operator=
. Делая что-то вроде
SqliteConnection conn("./database.db");
SqliteConnection conn1 = conn;
приведет к двум sqlite3_close вызовов по указателю базы данных, поскольку каждая переменная выходит из области видимости. Как вы преодолеваете эту проблему с помощью RAII, когда вам нужно назначить свой ресурс другой переменной?
+1 Для обозначения пользовательского делетера. – AraK
выглядит как лишний мусор в вашем ответе: строка ', destroy_connection())', похоже, не принадлежит. –
@Ben: Ой, спасибо - не знаю, как я получил это там. –