C++私有构造函数下,类静态成员变量能否用new初始化?
关于单例模式中构造函数私有与静态成员初始化的问题
静态成员变量能否用new()初始化?
可以。类的private构造函数仅限制类外部代码直接调用,但类的静态成员属于类本身的范畴,其初始化代码(包括用new创建类对象的操作)处于类的内部访问权限范围内,完全可以调用私有构造函数。这也是单例模式能成立的核心逻辑——通过类自身的静态成员创建唯一实例,外部无法直接构造对象。
解释A* A::aa = new A;这句代码
这句话完成了两个关键操作:
- 定义静态成员变量:
A::aa是在类A内部声明的静态指针成员,这里是在类外部对它进行定义(C++规则中,类内声明的非inline、非编译期常量的静态成员,必须在类外单独定义)。 - 创建并绑定唯一实例:通过
new A调用类A的私有构造函数,创建一个A类对象,再将该对象的内存地址赋值给静态指针aa。以此得到类A的唯一实例,后续单例模式通常会通过静态成员函数返回aa指针,让外部代码间接访问这个实例。
内容的提问来源于stack exchange,提问作者Leon
相关产品推荐
相关产品推荐

