3 回答

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
(A)按價(jià)值計(jì)算
Base(std::unique_ptr<Base> n) : next(std::move(n)) {}
Base newBase(std::move(nextBase));Base fromTemp(std::unique_ptr<Base>(new Base(...));
newBase
nextBase
std::move
std::move(nextBase)
Base&&
nextBase
Base::Base(std::unique_ptr<Base> n)
std::unique_ptr<Base>
Base&&
std::move(nextBase)
nextBase
n
.
(B)非Const l值參考
Base(std::unique_ptr<Base> &n) : next(std::move(n)) {}
Base newBase(std::unique_ptr<Base>(new Base)); //Illegal in this case.
Base newBase(nextBase);
nextBase
Base::Base(std::unique_ptr<Base> &n)
(C)由Const l-
Base(std::unique_ptr<Base> const &n);
const&
const&
Base
const
(D)按r-
Base(std::unique_ptr<Base> &&n) : next(std::move(n)) {}
你,你們 能,會(huì),可以臨時(shí)通過(guò): Base newBase(std::unique_ptr<Base>(new Base)); //legal now..
你,你們 必使用 std::move
在傳遞非臨時(shí)參數(shù)時(shí)。
Base newBase(std::move(nextBase));
nextBase
std::move
建議
(A)按價(jià)值計(jì)算:
如果你想讓一個(gè)函數(shù)聲稱 所有權(quán)
一種 unique_ptr
用價(jià)值來(lái)衡量。 (C)Const l-參考價(jià)值:
如果您的意思是讓一個(gè)函數(shù)簡(jiǎn)單地使用 unique_ptr
在該函數(shù)執(zhí)行期間,請(qǐng)按 const&
..或者,傳遞一個(gè) &
或 const&
指向的實(shí)際類型,而不是使用 unique_ptr
.(D)按r值計(jì)算:
如果一個(gè)函數(shù)可以或不聲明所有權(quán)(取決于內(nèi)部代碼路徑),那么請(qǐng)通過(guò) &&
..但我強(qiáng)烈建議不要在可能的情況下這樣做。
如何操作UNIQUE_PTR
unique_ptr
std::move
unique_ptr
std::move
std::unique_ptr<Base> newPtr(std::move(oldPtr));
std::unique_ptr<Base> &&temporary = std::move(oldPtr);std::unique_ptr<Base> newPtr(temporary);
temporary
oldPtr
newPtr
unique_ptr
&&
unique_ptr
std::move

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊
unique_ptr
unique_ptr
- 3 回答
- 0 關(guān)注
- 404 瀏覽
添加回答
舉報(bào)