gpt4 book ai didi

c++ - std::move 是否会使指向 unique_ptr 所拥有的对象的原始指针无效?

转载 作者:行者123 更新时间:2023-12-01 15:12:54 26 4
gpt4 key购买 nike

如果我有一个唯一的指针并且我使用了一个指向 unique_ptr 所拥有的东西的指针:

auto t = std::make_unique<int>(67);
auto m = t.get();
auto d = std::move(t);
std::cout << *m;


我知道 m有效期至 t被修改或销毁。
但是当我从 t 转移所有权时, m仍然有效。
有人可以让我了解这里发生了什么或标准对此有何规定。

最佳答案

m是指向 t 拥有的整数的原始指针。 auto d = std::move(t);将所有权转移给新的智能指针 d. d 的内部原始指针设置为资源的地址,t get 的原始指针设置为 nullptr。现在由 d 拥有的整数仍然在与以前完全相同的位置。这就是为什么你从 t 到那个地址的原始指针 m 在移动到 d 后仍然有效。此时 t 不再与您的整数有关,它只是一个 std::unique_ptr<int>当前未分配。您的原始指针 m 将保持有效,直到当前拥有的 unique_ptr 实际删除它,例如因为它超​​出范围。

关于c++ - std::move 是否会使指向 unique_ptr 所拥有的对象的原始指针无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62132659/

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