由于单例/命名构造函数,我有这个问题。在这两种情况下,真正的构造函数都是受保护的或私有的,两者都不能从外部访问。
例如,一个简短的命名构造函数是这样的:
class A
{
public:
static A createA() { return A(0); } // named constructor
private:
A (int x);
};
int main(void)
{
A a = A::createA();
}
我认为静态方法只能访问静态数据成员,或者通过现有对象访问私有数据/方法。但是,在上面的代码中,私有构造函数 A()
不是静态的,并且在调用它时,也不存在任何对象。所以我能想到的唯一解释就是静态方法可以访问同一个类的非静态私有方法。任何人都可以肯定或否定我的想法,可能有一些解释吗?
如果这太微不足道了,我深表歉意,但是关键词太常见了,我无法在数十个谷歌页面中找到答案。提前致谢。
原文由 Flowing Cloud 发布,翻译遵循 CC BY-SA 4.0 许可协议
对此进行跟进,为什么不允许这样做?如果允许创建对象,为什么不允许创建指向它的指针?