考虑具有无默认构造函数的类MyClass
。
我想编写一个如下所示的代码:
MyClass instance;
void init_system() {
instance = MyClass(parameters, of, the, constructor);
}
我上面写的代码当然失败了,错误 MyClass 没有没有参数的C'tor。
有没有正确的方法,或者我必须实施一种解决方法,例如使用共享指针?
答案 0 :(得分:7)
嗯,你班级的默认对象可以合理存在,也可以不存在
在后一种情况下,您可能会对std::optional
(C ++ 17之前的boost::optional
)感兴趣,以推迟构造对象。
答案 1 :(得分:1)
您可以将对象的初始化移动到init_system()
函数中:
MyClass& init_system()
{
static MyClass instance(parameters, of, the, constructor);
return instance;
}
您可能也想查找单身人士模式,并阅读有关它的广泛讨论;)
是的,另一种解决方案可能是使用unique_ptr<>
或shared_ptr<>
。
答案 2 :(得分:1)
实现这一目标有两种方法....
MyClass instance(parameters, of, the, constructor);
将使用正确的参数初始化MyClass。
单身模式
MyClass & MyClass::getInstance(){
static MyClass instance( parameters, of, constructor );
return instance;
}
在调用时返回getInstance。
第二种模式可以改善对构造对象的控制。