如何在C++中使用单例模式进行数据库连接的操作?
时间: 2024-12-18 13:20:20 浏览: 1
Sqlite3 C++ 简单单例数据库操作类封装
在C++中,可以使用单例模式来管理数据库连接,因为通常数据库连接是宝贵的资源,我们需要保证在整个程序生命周期内只有一个实例存在,并提供全局访问点。以下是使用懒汉式单例(Lazy initialization)的一个简单示例:
```cpp
#include <memory>
class DatabaseConnection {
private:
static std::shared_ptr<DatabaseConnection> instance;
explicit DatabaseConnection() {} // 私有构造函数防止直接创建实例
public:
~DatabaseConnection() { // 确保析构时关闭连接
if (instance) {
// 关闭连接的具体实现
disconnect();
}
}
static std::shared_ptr<DatabaseConnection>& getInstance() {
if (!instance) {
instance = std::make_shared<DatabaseConnection>();
// 连接数据库的具体实现
connectToDB();
}
return instance;
}
private:
friend class SingletonPattern; // 仅限于SingletonPattern类才能访问私有构造函数
};
std::shared_ptr<DatabaseConnection> DatabaseConnection::instance = nullptr;
// 使用单例获取数据库连接
auto db = DatabaseConnection::getInstance();
```
在这个例子中,`getInstance()`函数负责初始化数据库连接(如果尚未连接),并且返回唯一的共享指针实例。注意,这里使用了`std::shared_ptr`作为智能指针来管理内存,当所有引用计数归零时,数据库连接会自动关闭。
阅读全文