C++单例模式
单例模式
类只有一共实例,供全局使用如日志模块,任务管理器等等。
单例模式分为懒汉式和饿汉式,
饿汉式在类加载时就创建唯一实例,线程安全,启动时资源占用较高
懒汉式在第一次被使用时才会创建实例,需要机制实现线程安全,占用资源较少
饿汉式实现如下:
class Singleton
{
public:
static Singleton* get() {
return &s;
}
private:
Singleton() = default;
Singleton(const Singleton&) = delete;
Singleton operator = (const Singleton&) = delete;
static Singleton s;
};
Singleton Singleton::s;
1.私有化构造函数,删除拷贝构造和赋值重载函数
2.提供static对象,在类外初始化
3.提供public获取该对象的指针的static方法,可以在不依赖this指针的情况下调用成员方法
注意,不能将get()写成这样
static Singleton get() {
return s;
}
这会返回一个副本,必须返回对象的指针或者引用
懒汉式单例模式
class Singleton
{
public:
static Singleton* get() {
static Singleton s;
return &s;
}
private:
Singleton() = default;
Singleton(const Singleton&) = delete;
Singleton operator = (const Singleton&) = delete;
};
注意,这里使用了局部static变量,会在汇编层面保证它是线程安全的,所以不需要额外机制来保证线程安全性

浙公网安备 33010602011771号