單例模式。
大家都知道的一個設計模式。
每個人有不同的寫法。
看到別人寫的單例模式就感嘆。。太菜了我。
#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_;
希望我還能改。。。