3 回答
TA貢獻1943條經驗 獲得超7個贊
(A)按價值計算
Base(std::unique_ptr<Base> n)
: next(std::move(n)) {}Base newBase(std::move(nextBase));Base fromTemp(std::unique_ptr<Base>(new Base(...));
newBasenextBase
std::movestd::move(nextBase)Base&&nextBase
Base::Base(std::unique_ptr<Base> n)std::unique_ptr<Base>Base&&std::move(nextBase)nextBasen.
(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);
nextBaseBase::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)) {}你,你們 能,會,可以臨時通過: Base newBase(std::unique_ptr<Base>(new Base)); //legal now..
你,你們 必使用 std::move在傳遞非臨時參數時。
Base newBase(std::move(nextBase));
nextBasestd::move
建議
(A)按價值計算:
如果你想讓一個函數聲稱 所有權
一種 unique_ptr用價值來衡量。 (C)Const l-參考價值:
如果您的意思是讓一個函數簡單地使用 unique_ptr在該函數執行期間,請按 const&..或者,傳遞一個 &或 const&指向的實際類型,而不是使用 unique_ptr.(D)按r值計算:
如果一個函數可以或不聲明所有權(取決于內部代碼路徑),那么請通過 &&..但我強烈建議不要在可能的情況下這樣做。
如何操作UNIQUE_PTR
unique_ptrstd::move
unique_ptrstd::move
std::unique_ptr<Base> newPtr(std::move(oldPtr));
std::unique_ptr<Base> &&temporary = std::move(oldPtr);std::unique_ptr<Base> newPtr(temporary);
temporaryoldPtrnewPtrunique_ptr&&
unique_ptrstd::move
TA貢獻1871條經驗 獲得超8個贊
unique_ptrunique_ptr
- 3 回答
- 0 關注
- 417 瀏覽
添加回答
舉報
