移动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条评论
登录后参与评论

相关文章

来自分类Dev

移动unique_ptr之后,指向unique_ptr内容的指针的内容是否有效?

来自分类Dev

是否可以保证unique_ptr在移动后存储nullptr?

来自分类Dev

移动unique_ptr与使用get()?

来自分类Dev

无法返回unique_ptr

来自分类Dev

当unique_ptr在向量中时,对std :: unique_ptr <>拥有的对象的引用/ ptr是否安全?

来自分类Dev

铛,返回带有类型转换的std :: unique_ptr

来自分类Dev

Cython是否具有类似std :: unique_ptr的内容?

来自分类Dev

错误C2248:'std :: unique_ptr <_Ty> :: unique_ptr':无法访问在类'std :: unique_ptr <_Ty>'中声明的私有成员

来自分类Dev

错误C2248:'std :: unique_ptr <_Ty> :: unique_ptr':无法访问在类'std :: unique_ptr <_Ty>'中声明的私有成员

来自分类Dev

调用 c_str() 后的 unique_ptr 未指向有效值

来自分类Dev

C ++ std :: unique_ptr从函数返回并测试null

来自分类Dev

是否可以保证std :: unique_ptr删除顺序?

来自分类Dev

从函数返回对内的unique_ptr后的分段错误

来自分类Dev

在工厂中返回unique_ptr

来自分类Dev

如何正确返回unique_ptr的集合

来自分类Dev

从 unique_ptr 返回 const ref

来自分类Dev

通过解引用复制std :: unique_ptr的值

来自分类Dev

是否使用 unique_ptr 成员变量?

来自分类Dev

get()不会破坏std :: unique_ptr背后的想法吗?

来自分类Dev

具有std :: unique_ptr的容器的访问器函数

来自分类Dev

使用带有分配器的std :: unique_ptr

来自分类Dev

带有 STL 容器的 C++ std::unique_ptr

来自分类Dev

什么是unique_ptr :: get()而不是&*?

来自分类Dev

具有虚拟类的unique_ptr

来自分类Dev

unique_ptr有什么意义?

来自分类Dev

具有unique_ptr的结构向量

来自分类Dev

具有虚拟类的unique_ptr

来自分类Dev

unique_ptr有什么意义?

来自分类Dev

带有 unique_ptr 的工厂模式

Related 相关文章

  1. 1

    移动unique_ptr之后,指向unique_ptr内容的指针的内容是否有效?

  2. 2

    是否可以保证unique_ptr在移动后存储nullptr?

  3. 3

    移动unique_ptr与使用get()?

  4. 4

    无法返回unique_ptr

  5. 5

    当unique_ptr在向量中时,对std :: unique_ptr <>拥有的对象的引用/ ptr是否安全?

  6. 6

    铛,返回带有类型转换的std :: unique_ptr

  7. 7

    Cython是否具有类似std :: unique_ptr的内容?

  8. 8

    错误C2248:'std :: unique_ptr <_Ty> :: unique_ptr':无法访问在类'std :: unique_ptr <_Ty>'中声明的私有成员

  9. 9

    错误C2248:'std :: unique_ptr <_Ty> :: unique_ptr':无法访问在类'std :: unique_ptr <_Ty>'中声明的私有成员

  10. 10

    调用 c_str() 后的 unique_ptr 未指向有效值

  11. 11

    C ++ std :: unique_ptr从函数返回并测试null

  12. 12

    是否可以保证std :: unique_ptr删除顺序?

  13. 13

    从函数返回对内的unique_ptr后的分段错误

  14. 14

    在工厂中返回unique_ptr

  15. 15

    如何正确返回unique_ptr的集合

  16. 16

    从 unique_ptr 返回 const ref

  17. 17

    通过解引用复制std :: unique_ptr的值

  18. 18

    是否使用 unique_ptr 成员变量?

  19. 19

    get()不会破坏std :: unique_ptr背后的想法吗?

  20. 20

    具有std :: unique_ptr的容器的访问器函数

  21. 21

    使用带有分配器的std :: unique_ptr

  22. 22

    带有 STL 容器的 C++ std::unique_ptr

  23. 23

    什么是unique_ptr :: get()而不是&*?

  24. 24

    具有虚拟类的unique_ptr

  25. 25

    unique_ptr有什么意义?

  26. 26

    具有unique_ptr的结构向量

  27. 27

    具有虚拟类的unique_ptr

  28. 28

    unique_ptr有什么意义?

  29. 29

    带有 unique_ptr 的工厂模式

热门标签

归档