c – 如何在unique_ptrs之间移动所有权
发布时间:2020-12-16 10:35:02 所属栏目:百科 来源:网络整理
导读:我有两个聪明的指针: Foo *p1 = new Foo;Foo *p2 = new Foo;std::unique_ptrFoo u1(p1);std::unique_ptrFoo u2(p2); 现在我希望u1拥有p2.我希望u2没有任何东西(或nullptr).对于cource,同时必须优雅地删除p1. 我应该用什么C代码来完成它? 解决方法 使用std
我有两个聪明的指针:
Foo *p1 = new Foo; Foo *p2 = new Foo; std::unique_ptr<Foo> u1(p1); std::unique_ptr<Foo> u2(p2); 现在我希望u1拥有p2.我希望u2没有任何东西(或nullptr).对于cource,同时必须优雅地删除p1. 我应该用什么C代码来完成它? 解决方法
使用std :: move将u2转换为rvalue,然后使用move赋值将u2“移动”到u1:
u1 = std::move(u2); 在移动之后,u2将是nullptr,尽管这是unique_ptr的特例,不要指望从对象移动到一般的任何特定状态.当然p1将被优雅地删除. 我建议你根本不要创建p1或p2,也不要拥有任何拥有的原始指针: std::unique_ptr<Foo> u1(new Foo); 或者更好的是,在C 14中: auto u1 = std::make_unique<Foo>(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |