我試圖從一個函數構造一個對象,然後將它傳遞給使用它的函數(並使用它)。下面是我沒有直接使用從createObject
右值引用,因爲我將回到釋放的內存參考代碼在參數構造中使用std :: move
std::unique_ptr<Object> createObject() {
auto myobj = std::make_unique<Object>();
.. modify myobj ..
return std::move(myobj);
}
void consumeObject(std::unique_ptr<Object>&& robj) {
myvector.emplace_back(std::forward<std::unique_ptr<Object>>(robj));
}
consumeObject(createObject()); // Is this right?
。
是std::move
在代碼中指定的部分是否必要?如果像我在上面的代碼中所做的那樣,會傳遞一個右值以綁定到右值引用?該代碼看起來編譯就好了,但我不能看到
consumeObject(createObject());
和
consumeObject(std::move(createObject()));
你的代碼有誤:'createObject'返回一個'unique_ptr
在'return std :: move(myobj);'中禁止NRVO,只需'return myobj;'。 – Jarod42
@Angew是的,對不起。我把這個簡單的mcve忘了一部分 – Dean