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掉,否则在调用实例化对象的时候,不指定引用类型的话会拷贝一个新的对象,也没有错误提示。

作者:cwtxx

出处:https://www.cnblogs.com/cwtxx/p/18718167

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   cwtxx  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示