2015-11-25 57 views
0

感謝任何願意幫助的人:將構造函數傳遞給共享指針

我想在C++中創建一個Singleton類,並且我對這個語言很陌生。我的scrum團隊方法說我們應該只使用共享指針。然而,當我試圖將構造函數傳入我的Singleton對象(共享指針)時,出現錯誤,如「binary'=':沒有找到需要右手操作數的操作符...」。基本上不兼容的類型轉換。提供了以下必要的代碼:

//Singleton getter class 
std::shared_ptr<LibMouse3d::LibCoreMouse3d::DeviceHandle> LibMouse3d::LibCoreMouse3d::DeviceHandle::getInstance(){ 

    if(device == NULL){ 

     //trying pass constructor into shared pointer object 
     device = LibMouse3d::LibCoreMouse3d::DeviceHandle(); 
    } 

    return device; 
} 

這是我的構造函數:

LibMouse3d::LibCoreMouse3d::DeviceHandle::DeviceHandle() { 

    this->InitDevice(); 
} 

而且在頭文件中的對象

//singleton object - device 
std::shared_ptr<DeviceHandle> device; 

感謝您的任何努力,對不起,如果我忘了什麼事或添加非 - 相關信息。這是我的第一個問題,我無法在一段時間內回答自己的問題,也不希望我的Scrum高手擔心我的進度。

+2

好吧,如果這是你永遠不要需要有一個單獨的_shared_指針 – user3159253

+0

覺得作爲一個建設滯後一個全局變量_singleton_。 – user3159253

+0

關於'shared_ptr'的使用我的看法,你不應該使用'NULL'。如果你需要一個空值,使用'nullptr',但是使用智能指針(和原始指針),'if(!device)'很好。 – chris

回答

2

您沒有傳遞構造函數。實際上,目前沒有辦法在C++中傳遞構造函數。您正在爲device分配臨時對象DeviceHandle。但是,some documentation顯然沒有指派運營商採取T。對於這個問題,它也沒有一個賦值運算符,它會採用函數式的東西(比如構造函數)。

相反,智能指針有reset

device.reset(new DeviceHandle());