Вы можете посмотреть в следующем примере:
Vec3f Vec3f::operator*(float scale) const {
return Vec3f(v[0] * scale, v[1] * scale, v[2] * scale);
}
Vec3f a(1,2,3);
Vec3f b;
b = a * 2;
В общем случае произойдет следующее:
Реализация перегрузки оператора создаст новый экземпляр Ve3f с новыми аргументами, представляющими умножение.
процедура возврата вызовет конструктор копирования по умолчанию b
с созданным объектом в аргументе. Конструктор копирования будет копировать поля из своего аргумента в экземпляр 'b'.
Вы всегда можете реализовать свой собственный конструктор копирования, чтобы делать что-то еще, кроме мелкой копии, предоставляемой по умолчанию.
Vec3f(const Ver3f &src)...
Таким образом, в результате вы получите новые объекты со всеми полями, скопированными из поля, созданного в операторе возврата. Это возврат по значению, как определено в c ++ для объектов.
Результат будет другим, если вы вернете объект указателем или ссылкой. Это приведет к повреждению памяти.