c++ - std::move 是否使指向 unique_ptr 拥有的东西的原始指针无效?
问题描述
如果我有一个唯一的指针,并且我将指针指向所拥有的东西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 的原始指针设置为 nullptr。现在由 d 拥有的整数仍然在与以前完全相同的位置。这就是为什么从 t 到该地址的原始指针 m 在移动到 d 后仍然有效。此时 t 与您的整数无关,它只是std::unique_ptr<int>
当前未分配的 a 。您的原始指针 m 将保持有效,直到当前拥有的 unique_ptr 实际删除它,例如因为它超出范围。
推荐阅读
- c# - c# DevExpress 网格关系:如何让 GridView 显示行数?
- python - 创建一个基于其他两个系列的新系列
- c - 为什么循环没有停止?
- oracle - 从 oracle 中获取数据时的日期到时间戳问题
- python-3.x - 如何使循环或另一个函数一次又一次地重复相同的for循环?
- javascript - 自定义组件未在此基本 ReactJS 应用程序上正确呈现
- google-apps-script - 如何复制和粘贴行,然后删除上面的行以保持表单提交的公式格式?
- matlab - 梯度下降代码错误 - 对两个 theta 得到相同的答案
- c++ - QDoc可以生成文档,但是内容不全
- postgresql - 从不同的表中查找不同组的前 n 个结果