gpt4 book ai didi

c++11 - move unique_ptr 后 std::unique_ptr::get 返回的值是否有效?

转载 作者:行者123 更新时间:2023-12-02 19:10:40 24 4
gpt4 key购买 nike

考虑以下代码片段:

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 指向 move 的指针,如只要它还活着)?

最佳答案

是的,C++11 规范保证将对象的所有权从一个 unique_ptr 转移到另一个 unique_ptr 不会更改位置对象本身的属性,第二个 unique_ptr 上的 get() 返回的结果与传输前第一个 unique_ptr 上的返回值相同。

查看 N3337,第 20.7.1 节:

  1. Additionally, u can, upon request, transfer ownership to another unique pointer u2. Upon completion of such a transfer, the following postconditions hold:

    • u2.p is equal to the pre-transfer u.p,
    • u.p is equal to nullptr, and
    • if the pre-transfer u.d maintained state, such state has been transferred to u2.d.

其中 u 是存储指针 u.punique_ptr 对象。

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

关于c++11 - move unique_ptr 后 std::unique_ptr::get 返回的值是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29922666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com