Подвижный объект - это объект, который не будет скопирован глубоко, если он будет назначен другому объекту того же типа
Только если это имеет смысл.в следующем фрагменте
int i0 = 11;
int i1 = std::move(i0);
не будет «воровства» просто потому, что нечего воровать.поэтому предпосылка вопроса ошибочна - операция перемещения «украла бы» содержимое перемещения, если в этом есть смысл.
Также обратите внимание, что в мире C ++, в отличие от Java и C #, объектэто все, что занимает память - целые числа, указатели, символы - все они являются объектами.
std::string
использует технику оптимизации, называемую «оптимизация короткой строки» или SSO .Если строка достаточно короткая (и «достаточно короткая» определяется реализацией), динамический буфер не выделяется и, следовательно, ничего не «крадет».когда такая короткая строка перемещается, содержимое строки настолько короткое, что просто копируется в строку, в которую перемещаются, без вмешательства в динамически размещенные буферы.