在使用的同一语句中移动 unique_ptr
Moving a unique_ptr in the same statement it is used
这样做安全吗?我不确定执行顺序是否有保证。
auto foo = std::make_unique<Foo>();
foo->Bar(std::move(foo));
它将正常工作。
顺序:
- 计算
std::move(foo)
然后计算 foo->
(或者相反,这并不重要,因为两者都没有改变 foo
指针的状态)。
- 在#1 中获得的目标对象上调用
Foo::Bar(...)
,传递同样在#1 中获得的右值转换foo
。
可能不是最简洁的代码风格。
Is doing something like this safe?
不推荐按样式预期的方式工作,因为对象 foo
在移出后仍然可用。这会产生因访问从对象移出而导致错误的风险。
这样做安全吗?我不确定执行顺序是否有保证。
auto foo = std::make_unique<Foo>();
foo->Bar(std::move(foo));
它将正常工作。
顺序:
- 计算
std::move(foo)
然后计算foo->
(或者相反,这并不重要,因为两者都没有改变foo
指针的状态)。 - 在#1 中获得的目标对象上调用
Foo::Bar(...)
,传递同样在#1 中获得的右值转换foo
。
可能不是最简洁的代码风格。
Is doing something like this safe?
不推荐按样式预期的方式工作,因为对象 foo
在移出后仍然可用。这会产生因访问从对象移出而导致错误的风险。