C++中单例模式的总结——operater new & private construct

#include <iostream>
//单例模式
/*

    C++中的单例模式通常是通过对构造函数设置为private来实现

*/
using namespace std;

class world
{
    world()
    {
        //私有的构造函数,只能由类的成员函数来获取实例
    }

public:
    static world *getInstance();
    /*
    static函数也是类函数,所以在写定义时也要写明属于哪个类。与不同类函数不同的是,
    它没有传入this指针,正因为没有this指针,所以static类成员函数不能访问非static的
    类成员,只能访问 static修饰的类成员。
    */
    void show(); //show里面要用到instance指针,就必须要把实现写在后面,因为会要求申明顺序
};
static world *instance = nullptr;
world *world::getInstance() //必须在类外实现,否则会提示找不到符号:undefined reference to ...,并且不用加static
{
    if (instance == nullptr)
    {
        instance = new world;
    }
    return instance;
}
void world::show()
{
    cout << "ptr:" << hex <<instance << endl;
}
int main()
{
    world *a = world::getInstance(); //使用类中的static来获取单个实例
    world *b = world::getInstance(); //虽然是两个world对象,但是最终只会有一个world实例被创造出来
    a->show();
    b->show();
    //运行程序,就会看到即使我运行了两次getInstance,实际上的对象只生成了一份
}

 

方法2:

class D{
    private:
        D(){cout<<"D has created!"<<endl;}                   //首先,构造函数设置为private
    public:
        static D& init(){       //然后
            static D obj_only_1;
            return obj_only_1;
        }
    };
    D obj1=D::init();
    D obj2=D::init();
    D obj3=D::init();   //在这里可以看到,即使我申请了3个D对象,调用了3次init函数,但是只会调用一次D的构造函数,即:只输出一条“D has created!”
    //这就是大名鼎鼎的单例模式
    return 0;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值