问题--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

在对类的静态私有数据成员初始化的同时,还可以引用类的其它私有成员(包括数据成员和函数成员)

posted @ 2023-07-30 16:37  DawnTraveler  阅读(5)  评论(0编辑  收藏  举报