Семантика перемещения появилась с выходом стандарта C++11, чтобы дополнить RVO в C++98; Её также можно считать оптимизацией на подобии RVO, которую определяет пользователь (создавая конструкторы перемещения и перемещающий оператор копирования).
Хотя изначально она была создана для оптимизации, её так же можно использовать для некоторых ограничений. Например у std::unique_ptr
нет конструктора копирования, зато есть перемещающий конструктор, благодаря чему обеспечивается единоличное владение (подробнее о std::unique_ptr
здесь).