這裏究竟發生了什麼?我還以爲你不能夠/應該複製的unique_ptr然而真實的下面的代碼編譯並運行正常:通過函數創建unique_ptr
std::unique_ptr<SomeObject> CreateObject()
{
return std::unique_ptr<SomeObject>(new SomeObject);
}
// Useage
auto MySomeObject = CreateObject();
上調用此的unique_ptr的移動方法?如果是這樣,是否有一種方法可以在函數內實際創建unique_ptr,並在函數作用域退出時不返回對象,而返回它?
我寧願不返回實際指針,然後把它變成一個unique_ptr,以強制使用此函數返回的對象的unique_ptrs。我也不想僅僅使用shared_ptr來避免這個問題中提出的問題。
這是一個性能非常關鍵的應用領域,我擔心這裏可能會產生額外的開銷。
它不是複製'unique_ptr',而是**移動它。因此,該對象在「MySomeObject」被銷燬之前不會被銷燬。另外,如果上述情況產生任何開銷,我會感到驚訝,因爲RVO很可能會確保「MySomeObject」被直接初始化,而無需調用任何move-ctor。 – 2014-08-28 10:30:35
謝謝,這裏絕對讓我放心。我希望你已經發布作爲答案,所以我可以接受它。 – KKlouzal 2014-08-28 10:37:23
這是之前被問過的,但我無法找到以前的實例。 – 2014-08-28 10:46:00