使用私有构造函数在静态方法中创建对象
creating objects in static methods with private constructors
#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;
}
我不明白的事情很少:
- 由于静态方法与特定实例无关,所以它不相关理解如何创建一个有private的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));
}
或单例(但name create()表明它是工厂方法):
static A& create(int i)
{
static A a(i);
return a; // Ignore this problem.
}
正如我上面所说的,你的静态方法可以访问你的类的私有方法。构造函数被调用是因为你在堆栈上创建了局部变量,这是合法的静态方法只能使用静态变量和静态方法。除了它是私有的事实之外,构造函数(它是隐式静态的吗?)是如何被调用的?
相关文章:
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 为静态类创建指向对象的指针是否合法?
- C ++:如何在不创建对象的情况下在主函数中调用方法
- 工厂方法创建的对象应该在哪里删除?
- 如何在一种方法中创建对象并在另一种方法中使用它
- 如何发送通过绑定到函数/方法创建的函数对象?
- 使用各种数据类型成员创建对象的简便方法
- 从线程内的对象调用静态方法
- C++对象或静态方法
- 是否可以在一个语句中创建对象并调用方法?
- 在堆栈上创建对象的不同方法
- C++:从静态库创建共享对象
- 是C 静态对象中类的静态数据成员和静态方法
- 如何使用工厂方法创建不同的对象
- 在C++/WRL中使用静态方法创建WinRT组件
- 从静态方法访问对象的属性
- 使用私有构造函数在静态方法中创建对象
- 静态方法中的对象创建是改变其他静态对象的私有成员变量
- 静态方法来创建对象而不是构造函数
- 如何创建一个静态方法来返回对该类对象的引用