使用C++生成通过继承让模板类成单例模型,模板类参数是类
时间: 2024-11-05 21:27:43 浏览: 21
在C++中,可以利用模板类、继承以及单例模式(Singleton Pattern)来创建一个通用的单例实例,这个实例适用于传入的不同类。以下是一个简单的示例:
```cpp
template <typename T>
class SingletonTemplate {
private:
static std::unique_ptr<T> instance;
protected:
SingletonTemplate() = default;
~SingletonTemplate() = default;
SingletonTemplate(const SingletonTemplate&) = delete; // 防止复制构造
SingletonTemplate& operator=(const SingletonTemplate&) = delete; // 防止赋值
public:
static T* getInstance() {
if (instance == nullptr) {
instance = std::make_unique<T>();
}
return instance.get();
}
static void resetInstance() {
instance.reset(nullptr);
}
};
// 对于每个具体的类T,都会有一个单独的单例实例
template <typename T>
std::unique_ptr<T> SingletonTemplate<T>::instance = nullptr;
// 使用示例:
class MyClass : public SingletonTemplate<MyClass> {
public:
void doSomething() {
//...
}
};
int main() {
MyClass* mySingleton = MyClass::getInstance(); // 获取单例
mySingleton->doSomething();
// 如果需要销毁单例
MyClass::resetInstance();
// 下次再获取时,会重新创建新的实例
mySingleton = MyClass::getInstance();
return 0;
}
```
阅读全文