单例模式
单例模式(Singleton Pattern)是最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
大家都知道的一个设计模式。
#include <mutex>
#include <atomic>
template <typename T>
class Singleton {
public:
static T* GetInstance() {
T* tmp = instance_.load(std::memory_order::memory_order_acquire);
if (tmp == nullptr) {
std::lock_guard<std::mutex> lock(mutex_);
tmp = instance_.load(std::memory_order::memory_order_relaxed);
if (instance_ == nullptr) {
tmp = new T;
instance_.store(tmp, std::memory_order::memory_order_release);
}
}
return instance_;
}
virtual ~Singleton(){}
protected:
static std::mutex mutex_;
static std::atomic<T*> instance_;
Singleton(){}
Singleton (const Singleton &);
Singleton& operator = (const Singleton &);
Singleton (Singleton &&);
Singleton& operator = (Singleton &&);
};
template <typename T>
std::atomic<T*> Singleton<T>::instance_ = nullptr;
template <typename T>
std::mutex Singleton<T>::mutex_;