我正嘗試使用指向某個使用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,所有結果都一樣。
你的函數是否用'unique_ptr'做了任何事情?還是隻關心指出的對象? –
foo()只關注指向的對象......你正在考慮下面的comicsansMS的思路......這個想法很有道理。我應該使用引用而不是unique_ptr作爲foo參數。謝謝。 –