关于单例模式下 类的静态成员函数能调用类的构造函数的问题

  1. 问题起源
    在这里插入图片描述

  2. 我觉得很困惑,于是一顿操作,证明了确实类的静态成员函数不能调用类的非静态成员函数
    在这里插入图片描述
    即如果_data是非静态成员变量的话,编译不通过。

  3. 请教了下组内大神 疑问点:类的成员函数不也是类的非静态成员函数嘛?怎么getInstance能访问呢?
    大神说:如果类内还有一个bar的非静态成员函数,那么getInstance去访问bar的话,会出错,原因是编译器在访问bar时,会需要提供一个this指针(相当于编译器认为this->bar),因此,此时调用会出错。
    然而调用类的构造函数时,new Singleton 不需要提供一个this指针,因此类的静态成员函数可以调用构造函数,而在new完会产生一个this的指针,此时去调用bar是没有问题的(总结看来:如果类的构造函数不声明为private的话,那么相当于全局可见的,和main没什么差别)

  4. 升华
    大神说:其实把getInstance作为一个友元函数也可以实现单例!(太强了,以前都没有考虑过。)不过考虑到类的封装,一般还是用static的成员函数

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值