Я понимаю, что когда базовый тип данных перемещается, он всегда будет выполнять копию.
Например, вы не можете перейти от int
, и имеют оригинальный int
значение не определено:Неявные методы перемещения всегда сохраняют фундаментальные данные?
#include <iostream>
int main() {
int x = 100;
int y{std::move(x)};
std::cout << x << " " << y; //always prints "100 100"
}
Означает ли это, что то же самое верно для основных типов данных внутри определяемых пользователем типов?
#include <iostream>
#include <vector>
struct Foo{
int i = 100;
std::vector<int> vec={1,2,3,4,5}; //something that probably will have an invariant
};
int main() {
Foo x;
Foo y{std::move(x)};
std::cout << x.i << " " << y.i; //always print "100 100"?
}
Что говорит стандарт о сохранении этих основных значений типа после перемещения?
Почему так много дискуссий о том, что вы можете сделать со значением, из которого вы перешли? Если вы собираетесь использовать его, пропустив его где-нибудь, не перемещайте его. –
Я полностью согласен с вами. Я все равно хотел бы знать. –
@PeteBecker Перемещенные объекты не уничтожаются. Есть много веских причин использовать их впоследствии, которые не препятствуют их перемещению. – Yakk