2017-05-29 61 views
3

考虑类MyClass没有默认构造函数。C++:将值分配给全局类变量

我想写,看起来像下面的代码:

MyClass instance; 

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

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

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

+0

目前还不清楚(至少对我来说),你正在尝试做的。你想要初始化什么?静态成员变量(AKA类变量)?只需创建一个静态初始化方法?还有别的吗?请澄清。你想要一个单身人士吗?或者一个静态的工厂方法? – hyde

回答

7

好,无论是你的类的默认对象能够明智地存在,或者不能。
在后一种情况下,你可能会感兴趣的std::optionalboost::optional之前,C++ 17)推迟对象的构造。

+0

要考虑的另一个类是std :: unique_ptr。 –

1

您可以在对象的初始化进入你init_system()功能:

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

你可能想看看了单件模式,也和读到它的广泛讨论;)

而且是的,另一种解决方案可能是使用​​或shared_ptr<>

1

有2种方式实现这一目标....

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

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

Singleton模式

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

与返回的getInstance在呼叫时的时间。

第二图案改善了当对象被构建在控制。