【发布时间】:2017-06-27 06:35:09
【问题描述】:
考虑以下代码:
#include <memory>
struct Foo { std::unique_ptr<Foo> next; };
void f(Foo &foo) { foo = std::move(*foo.next); }
int main() {
Foo foo{};
foo.next = std::make_unique<Foo>();
foo.next->next = std::make_unique<Foo>();
f(foo);
}
通过执行foo = std::move(*foo.next);,foo.next.next 被移动到foo.next。
如果foo.next 作为第一步无效,则可以立即删除它指向的对象。这将导致删除 foo.next.next,这是我试图移动到 foo.next 的对象。
我很确定我的推理中遗漏了一些东西,但我不知道出了什么问题。
操作安全吗?标准在哪里让我对此感到放心?
【问题讨论】:
标签: c++ c++14 unique-ptr