在使用的同一语句中移动 unique_ptr

Moving a unique_ptr in the same statement it is used

这样做安全吗?我不确定执行顺序是否有保证。

auto foo = std::make_unique<Foo>();
foo->Bar(std::move(foo));

它将正常工作。

顺序:

  1. 计算 std::move(foo) 然后计算 foo->(或者相反,这并不重要,因为两者都没有改变 foo 指针的状态)。
  2. 在#1 中获得的目标对象上调用Foo::Bar(...),传递同样在#1 中获得的右值转换foo

可能不是最简洁的代码风格。

Is doing something like this safe?

不推荐按样式预期的方式工作,因为对象 foo 在移出后仍然可用。这会产生因访问从对象移出而导致错误的风险。