При множественном вызове конструктора создается только один объект поскольку компилятор оптимизирует код и избегает ненужных копирований. Компилятор распознает, что в создании объекта несколько раз задействован один и тот же конструктор и самостоятельно применяет оптимизацию.
При использовании конструктора перемещения вместо создания временных объектов, происходит прямой перенос ресурсов и состояния одного объекта в другой, избегая лишних копирований и улучшая производительность. Компилятор обнаруживает возможность применения конструктора перемещения и автоматически делает соответствующие оптимизации.
Чтобы найти дополнительную информацию об этой оптимизации и о использовании конструктора перемещения, рекомендуется обратиться к документации компилятора и языка программирования, с которыми вы работаете (например, документация для C++ или C#). Там вы найдете информацию о том, как компиляторы разных языков обрабатывают конструкторы перемещения и какие оптимизации они могут автоматически применять.
В большинстве случаев оптимизация этой натуры является полезной и значительно повышает производительность программы. Однако, если вы хотите отключить эту оптимизацию или предотвратить ее для конкретных частей кода, вам может потребоваться использовать явное копирование объектов вместо перемещения или переопределить поведение конструктора по умолчанию.