C++中使用单例类
单例类的定义和使用#
class Singleton {
public:
static shared_ptr<Singleton>& instancePtr() {
static std::shared_ptr<Singleton> instance(new Singleton);
return instance;
}
static Singleton& instance() {
return *instancePtr();
}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
virtual ~Singleton() = default;
protected:
Singleton() = default;
private:
int num{ 42 };
};
众所周知,C++中的单例模式可以在实例化函数中实例化一个静态的对象,然后返回静态对象的引用即可。不过由于C++还有智能指针的存在,只返回引用的话,无法满足使用智能指针的场景。
经过改进后,仍然是选择返回静态对象的方案,不过提供了两个实例化函数,分别返回智能指针和对象引用。有趣的是,在返回对象引用的实例化函数中,不再是实例化一个静态函数(否则两个实例化函数都被使用的情况下会出现两个实例对象,这与单例类的设计初衷相悖),而是返回智能指针实例化中的静态对象,这样就保证了全局只会有一个静态的实例化对象。
PS: 一定要将拷贝构造和拷贝赋值运算符重载都delete掉,否则在调用实例化对象的时候,不指定引用类型的话会拷贝一个新的对象,也没有错误提示。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律