result.real=real+v[y].real;
Откуда вы получаете y
от?
Вы определяете добавление Complex
к std::vector<Complex>
.Это немного странно.Обычно вы хотите определить перегрузку Complex
+ Complex
и использовать ее (ТОЛЬКО ) как синтаксическое удобство, когда оно очевидно или определено математически и однозначно ) для переменных этого типа (например, дляиндекс / доступ из вашего массива / вектора).Поведение, которое вы в настоящее время определяете, должно быть не в перегрузке оператора, а в простой функции.
Использование new
не нужно и приводит к утечке памяти, потому что нет соответствующего delete
,и, следовательно, этот адрес памяти в куче не освобождается.Вы должны просто инициализировать его как обычную переменную стека:
Complex result;
Предпочитайте выделение стека, когда это возможно;это не только позволяет избежать проблем с памятью, но и быстрее.
В любом случае эта переменная является временной, и в ней сделано две копии;один на возврате, а другой внутри вектора на push_back
.
С точки зрения вашего вопроса, я думаю, что вы хотите, чтобы у вас был какой-то класс агрегирования, который работает с различными числовыми типами и использует перегрузку операторов.
Вы можете использовать шаблоны для определениякласс агрегации как шаблонный класс, а затем создать его с вашими числовыми типами, например Complex
(просто убедитесь, что у них определен operator+()
), затем в некоторой функции в классе вы можете использовать перегрузку +
дляшаблонные переменные:
template <typename T>
class MyNumericAggregatorClass
//... in some function
// T a; T b;
T result = a + b;
//...
Альтернативой этому является использование полиморфизма для создания базового числового класса с virtual operator+()
и подклассами (например, Complex
), которые переопределяют этот оператор, тогда вы можете работатьна коллекцию указателей базового класса.
Чтобы дать дальнейшие указания, нужно показать больше вашего кода.Но если все, что вы пытаетесь сделать, это суммировать экземпляры числового типа, сохраненные в векторе, используя оператор +, тогда извлеките std::accumulate
из STL, и ваша проблема решена.