[英]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.