【发布时间】:2020-12-23 22:17:12
【问题描述】:
我正在学习 CPP++14 移动语义。在编写小代码时,我观察到一些奇怪的行为。我正在使用 r 值引用将唯一 ptr 的向量移动到函数中。在调试时,我发现更改也应用于移动的对象。为什么即使物体被移动,我也会观察到这种情况?以下代码中的移动有什么作用?
void func(std::vector<std::unique_ptr<int>> && vect) {
vect.emplace_back(std::move(std::make_unique<int>(3)));
return ;
}
int main() {
std::vector<std::unique_ptr<int>> a;
func(std::move(a));
cout<<(*(a[0]))<<endl;
return 0;
}
【问题讨论】:
-
你没有移动任何东西。您只是通过右值引用传递对象。此举只不过是在您的代码中进行强制转换。
-
@super 如果问题有用且符合主题,请不要在 cmets 中回答。
-
This 应该有助于您理解移动语义。您可能还想考虑让自己成为good C++ book
-
@πάνταῥεῖ - 如果你写一个简短的答案,它会自动转换为评论。
-
@Den-Jason Ah ty。我不知道。应该是最近改的。我已经离开元训练营一年了 ;-)
标签: c++ stdvector unique-ptr stdmove