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变量,会在汇编层面保证它是线程安全的,所以不需要额外机制来保证线程安全性

posted @ 2023-09-27 10:31  霁空  阅读(38)  评论(0)    收藏  举报