移动unique_ptr后,std :: unique_ptr :: get返回的值是否有效?

伊利亚·科别列夫斯基(Ilya Kobelevskiy)

考虑以下代码片段:

class Owner {
public:
 Owner(std::unique_ptr<int> ptr) : owned_pointer<int>(std:move(ptr)) {}
private:
 std::unique_ptr<int> owned_pointer;
};


std::unique_ptr<int> ptr(new int);
int* ptr1 = ptr.get();
Owner new_owner(std::move(ptr));

只要new_owner处于作用域内,就可以假定ptr1有效吗?它似乎有效,但是我找不到明确说明的规范-它是未定义的行为/实现特定的对象,只是对我有用,还是上面发布的代码有效(保证ptr1指向移动指针,因为只要它还活着)?

i

是的,C ++ 11规范保证将对象的所有权从一个对象转移unique_ptr到另一个对象unique_ptr并不会改变对象本身的位置,并且get()第二个对象unique_ptr返回值与unique_ptr转移之前第一个对象返回值相同

查看N3337,第20.7.1节:

  1. 另外,u可以根据要求将所有权转移到另一个唯一的指针u2转让完成后,以下条件成立:

    • u2.p等于转移前u.p
    • u.p等于nullptr
    • 如果转移前u.d保持状态,则该状态已转移到u2.d

存储指针uunique_ptr对象在哪里u.p

第一个项目符号直接回答了问题,因为get()指定为返回u.p

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章