C++实现单例模式

单例模式

#include <iostream>

class Singleton
{
public: 
    // 获取Singleton实例的静态方法
    static Singleton& get()
    {
        static Singleton instance;
        return instance;
    }
    
    // 一个示例成员函数
    void hello()
    {
        std::cout << "Hello, Singleton!" << std::endl;
    }

    // 禁止外部通过构造函数、拷贝构造函数和赋值运算符创建新的实例
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

private:
    // 私有构造函数确保不能从外部创建实例
    Singleton() {}
};

int main()
{
    // 通过静态方法访问Singleton实例并调用hello方法
    Singleton::get().hello();
    return 0;
}

在这个场景中,static Singleton& get() 函数被定义为返回一个 Singleton 类型的引用,并且这个函数本身也被声明为 static。这样设计有几个关键原因:

  1. 静态成员函数static 关键字在这里表明 get() 是一个静态成员函数。静态成员函数可以在没有创建类的实例的情况下被调用。这对于实现单例模式非常重要,因为单例模式的目标是控制对象的创建,确保整个程序中只创建一个实例。

  2. 返回引用:函数返回类型为 Singleton&,意味着返回的是一个对 Singleton 实例的引用。使用引用的原因是我们希望直接返回单例对象本身,而不是它的一个副本。这确保了无论何时调用 get() 方法,返回的都是对同一个 Singleton 实例的引用。

  3. 保证单例:通过在 get() 函数内部声明一个静态局部变量 static Singleton instance;,我们确保了这个类的实例只会被创建一次。静态局部变量的初始化仅在第一次访问函数时进行,之后的访问会返回同一个实例。这是实现单例模式的关键技巧之一。

static Singleton& get() 函数的设计确保了这个类遵循单例模式的要求,即整个程序中只有一个该类的实例,且易于从任何地方访问这个实例。

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值