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 @   霁空  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示