#include <iostream>
#include <memory>
template<typename T>
class Singleton {
private:
// 静态成员变量,指向单例的指针
static std::unique_ptr<T> instance;
// 构造函数私有化,防止外部直接创建实例
Singleton() {}
// 拷贝构造函数和赋值操作符私有化,防止拷贝
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
public:
// 静态方法,用于获取单例的引用
static T& getInstance() {
if (!instance) {
// 使用new创建实例,并用unique_ptr管理内存
instance = std::make_unique<T>();
}
return *instance;
}
// 提供一个虚析构函数,以便派生类可以正确析构
virtual ~Singleton() {}
};
// 模板静态成员变量的定义需要放在类定义之外
template<typename T>
std::unique_ptr<T> Singleton<T>::instance = nullptr;
// 示例用法
class MySingleton : public Singleton<MySingleton> {
public:
void doSomething() {
std::cout << "Doing something in MySingleton" << std::endl;
}
};
int main() {
// 获取MySingleton的单例并调用其方法
MySingleton& singleton = MySingleton::getInstance();
singleton.doSomething();
// 再次获取,确保是同一个实例
MySingleton& anotherSingleton = MySingleton::getInstance();
anotherSingleton.doSomething();
return 0;
}
11-30
1401
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
03-10
2561
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-10
250
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
08-09