std :: move()之后,unique_ptr会发生什么?

user3496846:

这段代码是我想要做的:

Tony& Movie::addTony()
{
    Tony *newTony = new Tony;
    std::unique_ptr<Tony> tony(newTony);
    attachActor(std::move(tony));
    return *newTony;
}

我想知道我是否可以这样做:

Tony& Movie::addTony()
{
    std::unique_ptr<Tony> tony(new Tony);
    attachActor(std::move(tony));
    return *tony.get();
}

但是会*tony.get()是相同的指针还是null?我知道我可以验证,但是标准操作是什么?

本杰明·林德利(Benjamin Lindley):

不,您不能这样做。移动unique_ptrnull即可。如果不是,那么它将不是唯一的。我当然假设这样attachActor做不会像这样愚蠢:

attachActor(std::unique_ptr<Tony>&&) {
    // take the unique_ptr by r-value reference,
    // and then don't move from it, leaving the
    // original intact
}

第20.8.1节第4段。

另外,根据请求,u(unique_ptr对象)可以将所有权转移到另一个唯一指针u2。在这种传输完成时,下面的后置条件成立:
   - u2.p等于转印前起来,
   - 最多等于nullptr,和
   -如果所述预转印UD维护的状态,这样的状态一直转移到u2.d。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用本地原始指针初始化std :: unique_ptr时会发生什么?

std :: unique_ptr :: release()与std :: move()

参数std :: unique_ptr <T> &&的std :: move或std :: forward

函数(通过std :: move)返回的unique_ptr什么时候超出范围

使用什么std :: optional或std :: unique_ptr

使用std :: unique_ptr <T>&代替std :: unique_ptr <T>有什么优势吗?

没有std :: move的值如何返回unique_ptr?

使用std :: move(nullptr)的unique_ptr的operator =的C ++错误

使用 std::move 分配 unique_ptr 不起作用

为什么我不能使用{std :: move(first),std :: move(second)}实例化std :: vector <std :: unique_ptr <int >>?

std :: unique_ptr与std :: map

与std :: shared_ptr和std :: unique_ptr相比,std :: optional`有什么优势?

应用std :: move后对象实例会发生什么

为什么std :: unique_ptr :: reset()总是noexcept?

为什么std :: unique_ptr重设与赋值不同?

为什么我需要移动 `std::unique_ptr`

为什么std :: shared_ptr <T> = std :: unique_ptr <T []>可以编译,而std :: shared_ptr <T []> = std :: unique_ptr <T []>不可以编译?

std :: unique_ptr和std :: shared_ptr之间的破坏行为差异的原理是什么?

使用 std::move 将 std::unique_ptr 作为 qt 信号参数传递

C++ 在 std::unique_ptr 上调用 std::move 而不复制

无法使用带有std :: move的自定义删除器插入std :: unique_ptr

为什么用std :: make_unique代替std :: unique_ptr :: make?

std :: auto_ptr到std :: unique_ptr

分配make_unique是否需要std :: move()到一个空的unique_ptr?

重定向unique_ptr时会发生什么?

如果没有noexcept move构造函数,为什么带有std :: vector的代码不能编译却带有std :: unique_ptr的代码可以编译?

返回对std :: unique_ptr的引用的原因

is_assignable和std :: unique_ptr

std :: unique_ptr constexpr构造函数