Разбираем, почему возвращать объект из функции по значению — это нормально в современном C++: что происходит при
return (копирование, перемещение или устранение лишних операций), как работает
copy elision и оптимизация
NRVO, почему
std::move в
return чаще всего не нужен, и как это выглядит на практике на учебном типе
Buffer (владеющий ресурсом,
move-семантика, корректный жизненный цикл).