繁体   English   中英

C++ 移动带有 std::vector 和 std::array 成员的 object 的构造函数

[英]C++ Move constructor for object with std::vector and std::array members

我目前正在实现一个应该处理数学的Vector class。 这个 class 有两个成员std::vector<double> vector_std::array<std::size_t, 2> size_

现在我想写一个移动构造函数Vector(Vector&& other); . 我尝试了多种方法,包括Vector(Vector&& other) = default; ,但似乎没有一个能正确完成这项工作。 我总是最终得到两个对象具有相同的size_数组,而不是other具有{0, 0}

默认移动构造函数或std::move(...)不应该移动内容并将other的内容设置为其默认值吗?

[...] 并将对方的内容设置为其默认值?

否。如果没有另行说明,则从 object 移出的是有效但未指定的 state。 将所有元素设置为某个默认值将是相当浪费的。

此外, std::array确实包含元素。 它不仅仅是指向一些可以廉价移动的动态分配元素的指针。 元素就在数组中。 因此,您只能移动单个元素,只能复制整个数组。 std::array的元素可移动时,它是可移动的,否则移动它只会复制一份。 有关详细信息,请参阅std::array 可移动吗? .

TL;博士

Vector(Vector&& other) = default; 很好。 你只是期望它做一些它不做的事情。 移动既不会将移动的元素设置为某个默认值,也不会移动std::array<size_t,2>实际上移动元素,而是复制它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM