问题--C++单例模式中唯一对象初始化时关于在类外调用私有的无参构造问题
1.问题
在单例模式中初始化单例对象Person* Person::signal= new Person; 这一步在类外,而new Person需要调用私有的无参构造,但是只有在类内部才能调用私有函数,这里是不是矛盾了?
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string.h>
#include <string>
using namespace std;
class Person{
public:
int age;
int yanzhi;
//使用static就可直接用类的作用域访问了
static Person* instance()
{
return single;
}
private:
//放在private里面,防止Person::single = NULL的情况出现
static Person* single; //为什么要static,因为这样就可以在没有对象的时候便分配空间
Person(){}
Person(const Person &p){}
};
Person* Person::single= new Person;
void test01(){
Person *p = Person::instance();
p -> age = 100;
p -> yanzi = 100;
//Person::single->age = 100;
//Person::single->yanzi = 100;
}
int main() {
test01();
return 0;
}
2.解释
参考:https://blog.csdn.net/qq_43684922/article/details/105468911
在对类的静态私有数据成员初始化的同时,还可以引用类的其它私有成员(包括数据成员和函数成员)