2014-02-27 116 views
7

我正嘗試使用指向某個使用unique_ptr的指針來遷移解決方案,以簡化資源處理。我知道移動語義以及使用std::move()與unique_ptr一起使用。C++ unique_ptr常量引用

目前我有一個功能,簽名int foo(const T2DMatrix* m),我用動態分配的2D矩陣對象調用它。函數foo只需要對T2DMatrix類進行只讀訪問,因此是const參數。現在,我已將其遷移到int foo(unique_ptr<const T2DMatrix>& m)。從一個不同的函數,process(),其中有一個unique_ptr<T2DMatrix>對象(使用工廠函數創建),我想將對象傳遞給foo作爲參數。但是,編譯器不允許我這樣做。請注意,我不想將對象的所有權從process()轉移到foo(),因此使用引用。使用unique_ptr<const T2DMatrix>調用foo()可以正常工作,但如果我更改函數簽名,const保證不會被強制執行。

注:一個解決方案,我發現是創建進程的新unique_ptr<const T2DMatrix>對象(),使用std::move()從原來的unique_ptr<T2DMatrix>對象將所有權轉讓給它,把它傳遞給foo(),並再次過程轉移所有權( )。但這似乎不是理想的解決方案。

請建議等價的指針解決方案,它允許我將T2DMatrix *參數傳遞給const T2DMatrix *參數。我嘗試使用msvc2012,msvc2013和g ++ 4.8,所有結果都一樣。

+1

你的函數是否用'unique_ptr'做了任何事情?還是隻關心指出的對象? –

+0

foo()只關注指向的對象......你正在考慮下面的comicsansMS的思路......這個想法很有道理。我應該使用引用而不是unique_ptr作爲foo參數。謝謝。 –

回答

19

如果該功能不需要所有權,通過一個簡單的參考,而不是參考unique_ptr

int foo(T2DMatrix const& m); 


std::unique_ptr<T2DMatrix> matrixptr; 
[...] 
foo(*matrixptr); 

沒有必要人爲地限制foounique_ptr■如果功能不關心所有權反正。