0

做这样的事情安全吗?我不确定执行顺序是否得到保证。

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

2 回答 2

1

它会正常工作。

序列:

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

可能不是最干净的代码风格。

于 2018-10-16T14:49:44.237 回答
0

做这样的事情安全吗?

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

于 2018-10-16T14:58:10.927 回答