使用cpp11写一个线程安全的单例模板
时间: 2023-01-28 21:52:36 浏览: 64
下面是一个使用 C++11 写的线程安全的单例模板:
```cpp
template<typename T>
class Singleton {
public:
static T& GetInstance() {
static T instance;
return instance;
}
private:
Singleton() = default;
~Singleton() = default;
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
};
```
使用方法:
```cpp
class MyClass {
public:
void DoSomething() {
// ...
}
};
int main() {
MyClass& instance = Singleton<MyClass>::GetInstance();
instance.DoSomething();
return 0;
}
```
这个模板使用了 C++11 的 `static` 局部变量和 `thread_local` 关键字,保证了单例在多线程环境下的线程安全。
相关问题
使用cpp11写一个单例模板
这是一个使用 C++11 实现的单例模板的示例:
```cpp
template <typename T>
class Singleton
{
public:
static T& getInstance()
{
static T instance;
return instance;
}
private:
Singleton() {}
~Singleton() {}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
Singleton(Singleton&&) = delete;
Singleton& operator=(Singleton&&) = delete;
};
```
使用方法:
```cpp
class MyClass : public Singleton<MyClass>
{
friend Singleton<MyClass>;
private:
MyClass() {}
};
int main()
{
MyClass& instance = MyClass::getInstance();
return 0;
}
```
使用cpp 写一个单例模板
首先,单例模式是一种常用的设计模式,它提供了一个单独的类,该类的对象在整个应用程序中只有一个实例。在 C++ 中,可以使用模板来实现单例模式。
以下是一个使用模板实现单例模式的 C++ 代码示例:
```cpp
template <typename T>
class Singleton
{
public:
static T& getInstance()
{
static T instance;
return instance;
}
protected:
Singleton() {}
private:
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
};
```
使用这个模板,可以将任何类声明为单例类。例如,可以这样声明一个日志类:
```cpp
class Logger : public Singleton<Logger>
{
friend class Singleton<Logger>;
private:
Logger() {}
public:
void log(const std::string& message)
{
// 实现日志记录
}
};
```
然后,可以使用以下方式访问日志类的唯一实例:
```cpp
Logger& logger = Logger::getInstance();
logger.log("Hello, world!");
```