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(...));
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)) {}
你,你们 能,会,可以临时通过: Base newBase(std::unique_ptr<Base>(new Base)); //legal now..
你,你们 必使用 std::move
在传递非临时参数时。
Base newBase(std::move(nextBase));
nextBase
std::move
建议
(A)按价值计算:
如果你想让一个函数声称 所有权
一种 unique_ptr
用价值来衡量。 (C)Const l-参考价值:
如果您的意思是让一个函数简单地使用 unique_ptr
在该函数执行期间,请按 const&
..或者,传递一个 &
或 const&
指向的实际类型,而不是使用 unique_ptr
.(D)按r值计算:
如果一个函数可以或不声明所有权(取决于内部代码路径),那么请通过 &&
..但我强烈建议不要在可能的情况下这样做。
如何操作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贡献1871条经验 获得超8个赞
unique_ptr
unique_ptr
- 3 回答
- 0 关注
- 376 浏览
添加回答
举报