C++实现模板类单例
时间: 2024-11-03 11:17:00 浏览: 9
C++单例类模板详解
在C++中,实现模板类的单例模式需要谨慎处理,因为C++不像其他一些语言那样有内置的单例模式支持。以下是一个简单的线程安全版本的C++模板类单例示例:
```cpp
template <typename T>
class Singleton {
public:
static T& getInstance() {
static std::once_flag flag;
std::call_once(flag, [] {
instance = T();
});
return instance;
}
private:
Singleton() = default; // 防止实例化
Singleton(const Singleton&) = delete; // 阻止拷贝构造
Singleton& operator=(const Singleton&) = delete; // 阻止赋值操作
static T& instance;
};
// 特殊化模板实例,确保所有类型的Singleton都有静态成员instance
template <typename T>
T& Singleton<T>::instance;
// 使用时只需实例化所需的类型
class MyClass : public Singleton<MyClass> {};
int main() {
auto& myInstance = MyClass::getInstance(); // 获取单例实例
return 0;
}
```
在这个例子中,`getInstance()`函数使用了C++11的`std::call_once`保证初始化只执行一次,然后返回一个对静态实例的引用。这样可以防止多重实例化,并保持对单例的控制。
阅读全文