我是C ++的新手,还没有完全理解RAII模式。我正在写一个通过SQLiteC++使用sqlite数据库的类。以下是一些使用有效数据库的示例代码:
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)");
}
}
这是最好的方式吗?有没有一个更惯用/更优雅的方法来实现这个没有指针?
答案 0 :(得分:5)
将对象作为成员:
class DBUser
{
private:
SQLite::Database db;
public:
explicit DBUser(std::string &path) :
db (path, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE)
{
}
void test() {
db.exec("DROP TABLE IF EXISTS test");
db.exec("CREATE TABLE test (id INTEGER PRIMARY KEY, foobar TEXT)");
}
}