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

C++: Assign value to global class variable

本文关键字:类变量 赋值 全局 C++      更新时间:2023-10-16

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

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

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

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

是否有任何正确的方法可以做到这一点,或者我必须实施一种解决方法,例如使用共享指针?

好吧,要么类的默认对象可以合理地存在,要么不能。
在后一种情况下,您可能对std::optional(C++17 之前的boost::optional(感兴趣,以推迟对象的构造。

您可以将

对象的初始化移动到init_system()函数中:

MyClass& init_system()
{
   static MyClass instance(parameters, of, the, constructor);
   return instance;
}

您可能还想查找单例模式,并阅读有关它的广泛讨论;)

是的,另一种解决方案可能是使用 unique_ptr<>shared_ptr<> .

有两种方法可以实现这一点。

MyClass instance(parameters, of, the, constructor);

将使用正确的参数初始化 MyClass。

单例模式

MyClass & MyClass::getInstance(){
   static MyClass instance( parameters, of, constructor );
   return instance;
}

在调用时返回 getInstance。

第二种模式改进了对对象构造时间的控制。