C ++:为全局类变量赋值

时间:2017-05-29 10:23:03

标签: c++

考虑具有默认构造函数的类MyClass

我想编写一个如下所示的代码:

MyClass instance;

void init_system() {
    instance = MyClass(parameters, of, the, constructor);
}

我上面写的代码当然失败了,错误 MyClass 没有没有参数的C'tor。

有没有正确的方法,或者我必须实施一种解决方法,例如使用共享指针?

3 个答案:

答案 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。

第二种模式可以改善对构造对象的控制。