Как указано здесь , ваш класс на самом деле имеет конструктор перемещения (неявно сгенерированный), поэтому его не следует копировать в код, по крайней мере, один раз (в main
).
Одна проблема состоит в том, что то, на что вы полагаетесь, называется NRVO , и компиляторам * * не требуется для его реализации (в отличие от более счастливого, более простого брата, RVO.) Итак, ваша структура есть шанс, очень маленький, чтобы быть скопированным в операторе return
, но такой маленький, что возврат за ходом (как return std::move(return_this);
) фактически никогда не рекомендуется. Скорее всего, NRVO действительно будет применяться, если в вашей функции действительно есть один оператор return
, который возвращает один именованный объект.