2017-05-29 57 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在呼叫時的時間。

第二圖案改善了當對象被構建在控制。