2017-04-21 108 views
1

說我有一個A類型的對象。移動類沒有移動構造函數

如果我想將它移動到函數foo(A)

一個選項是做foo(std::move(a)),它將調用移動構造函數。

但是,假設我正在使用一個我無法控制的類。如果我仍然想要移動這個類型,這不就足夠了嗎?

std::unique_ptr<A> a_ptr(new A()); 
foo(std::move(a_ptr)); 

foo更改爲接受unique_ptr。

兩者是否相似(在第二種情況下使用智能指針的開銷很小)?

+3

開銷是動態分配。 –

+0

可能的重複:[什麼是移動語義?](http://stackoverflow.com/q/3106110/734069) –

+0

第一種情況移動對象,第二種情況移動智能指針。 –

回答

-1

不,使用此語法您將移動唯一指針,而不是對象。該對象必須支持被移動。但是既然你可以使用指針,請避免移動並傳遞指針。開銷是單指針間接(非常小)。

+0

不能複製unique_ptr – Brent81

+0

是的,我知道指針正在移動。但底層對象不會被複制到正確的位置?那最終的結果是不是一樣? – ksb

+0

是的,你不能複製一個獨特的ptr。 – ksb