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

  1. 问题起源
    关于单例模式下 类的静态成员函数能调用类的构造函数的问题_第1张图片

  2. 我觉得很困惑,于是一顿操作,证明了确实类的静态成员函数不能调用类的非静态成员函数
    关于单例模式下 类的静态成员函数能调用类的构造函数的问题_第2张图片
    即如果_data是非静态成员变量的话,编译不通过。

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

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

你可能感兴趣的:(设计模式,c++,设计模式)