我是C++新手,尚未完全理解RAII模式。我在寫一個使用sqlite數據庫的類,通過SQLiteC++。下面是一個使用的作品數據庫的一些示例代碼:處理RAII成員變量的正確方法是什麼?
void test() {
SQLite::Database db(TestDbPath(), SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE);
db.exec("DROP TABLE IF EXISTS test");
db.exec("CREATE TABLE test (id INTEGER PRIMARY KEY, foobar TEXT)");
}
我想要做的就是從一個類使用SQLite::Database
。這樣的東西可以工作:
class DBUser
{
private:
SQLite::Database *db;
public:
explicit DBUser(std::string &path) {
db = new SQLite::Database(path, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE);
}
~DBUser() {
delete db;
}
void test() {
db->exec("DROP TABLE IF EXISTS test");
db->exec("CREATE TABLE test (id INTEGER PRIMARY KEY, foobar TEXT)");
}
}
雖然這是最好的方法嗎?有沒有更好的方法來實現這個沒有指針?
一個簡單的數據成員? –
如果你有,可以使用'std :: shared_ptr',否則使用'Boost庫'中的'boost :: shared_ptr'。 – Mehrdad
在這種情況下使用'std :: unique_ptr'可能是合適的。考慮到語義,我認爲你不能分享這些指針。 – MSalters