Копия, которую вы видите, является копией оператора return в функции create.Это не может быть устранено с помощью RVO, так как невозможно создать возвращаемое значение напрямую.Вы просили «вернуть».Копия нужна здесь;нет способа вернуть объект без него.
На стандартном языке следующее условие [C ++ 11: 12.8 / 31] не выполняется
при возвратеоператор в функции с типом возвращаемого класса, когда выражением является именем энергонезависимого автоматического объекта (, отличного от функции или catch-clause параметр ) с тем же типом cv-unqualified, что и тип возвращаемого функцией, операция копирования / перемещения может быть опущена путем создания автоматического объекта непосредственно в возвращаемое значение функции
Asпо причинам, это не произвольное правило, оно имеет смысл с точки зрения реализации, поскольку это то, что невозможно сделать с параметрами функции:
построение автоматического объекта непосредственно ввозвращаемое значение функции
Вы копируете параметр функции.Вы не можете удалить эту копию без встраивания, так как параметр уже существует до того, как вы введете функцию, поэтому вы не можете вместо этого напрямую создать этот объект в возвращаемое значение.