C++11中的单例模式分为懒汉模式和饿汉模式。
区别:
懒汉模式:延迟创建,在主动获取对象实例的时候才去创建对象。缺点:多线程时需要安全处理。
饿汉模式:程序初始化即创建
饿汉模式安全写法:
static Singleton* GetInstance()
{
if(singleton_ == nullptr)
{
std::lock_guard<std::mutex> lock(Singleton::m_lock);
GetInstance();
return singleton_;
}
}
或者采用call_once的写法:
std::once_flag g_flag;
class Singleton {
public:
static void CreatInstance()
{
singleton_ = new Singleton();
}
static Singleton* GetInstance() {
std::call_once(g_flag, CreatInstance);
return singleton_;
}
static void DestreyInstance() {
if (singleton_ != NULL) {
delete singleton_;
}
}
private:
// 防止外部构造。
Singleton() = default;
// 防止拷贝和赋值。
Singleton& operator=(const Singleton&) = delete;
Singleton(const Singleton& singleton2) = delete;
private:
static Singleton* singleton_;
static std::once_flag initSuccess;
static std::mutex m_lock;
};
本文介绍了C++11中单例模式的两种实现方式:懒汉模式和饿汉模式。懒汉模式在首次请求时创建实例,适用于延迟加载场景;饿汉模式则在程序启动时就创建实例。此外,还提供了线程安全的实现示例。
387

被折叠的 条评论
为什么被折叠?



