#include<iostream>
using namespace std;
struct A {
static A& create(int i)
{
A a(i);
return a; // Ignore this problem.
}
void print() { cout<< _a <<endl; }
private:
A(int i):_a(i){}
int _a;
};
int main()
{
A& a = A::create(2);
a.print();
return 0;
}
我不明白一些事情:
答案 0 :(得分:2)
由于静态方法与特定实例无关,我不明白如何创建具有私有构造函数的A对象。
静态方法,在A类定义中,可以访问私有构造函数。如果你的样品:
static A& create(int i)
{
A a(i);
return a; // Ignore this problem.
}
你正在返回对UB的局部变量的引用(这是你上面评论的原因吗?)。也许您的意思是static A create(int i)
或std::unique_ptr
:
static std::unique_ptr<A> create(int i) {
return std::unique_ptr<A>(new A(num));
}
或单例(但名称create()表示其相当工厂方法):
static A& create(int i)
{
static A a(i);
return a; // Ignore this problem.
}
静态方法只能用于静态变量和方法。除了它是私有的,为什么构造函数(它是一个隐式的静态?)可以被调用吗?
如上所述,您的静态方法可以访问您的类的私有方法。调用构造函数是因为您正在堆栈上创建局部变量,它是合法的。