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 关注
- 421 浏览
添加回答
举报
