У меня есть следующий пример, чтобы проиллюстрировать мой вопрос.
У меня есть класс MatrixВозврат ссылок на динамически выделенные объекты
class Matrix{
private:
int *array;
int x;
int y;
public:
//some other things..
Matrix& operator+(Matrix& add);
Matrix& operator=(Matrix& matr);
}
Я хочу оператор +, чтобы вернуть совершенно новый объект, который будет назначен Matrix объектов, а не ссылки на MATRIX, ни указателей на Матрицу. Таким образом, оператор = должен просто скопировать значения по частям.
(я знаю, что эта реализация класса Matrix не хорошо, но я делаю это так, чтобы проиллюстрировать мою проблему)
Теперь проблема заключается в реализации оператора +
Сначала я попытался создать объект в перегруженной функции, как этот
Matrix sum;
//do what i have to do and then
return sum;
, но это создает проблемы в виде суммы объекта, конечно, будет разрушен и деструктор матрица конечно
delete [] array;
Альтернатива заключается в создании
Matrix *sum;
sum = new Matrix;
sum->array = new int[//size that i need];
//do what i have to do
return *sum;
Так что теперь в основном
C=A+B;
(А, В, С являются матричные объекты)
A + B возвращает вновь созданный ссылка на объект в куче. Этот объект будет присвоен C и будет выполняться копия по биту. C будет иметь правильное значение x, правильное значение y и массив C-> укажет на массив int, который был выделен в перегруженном операторе +
Наконец после этого распайки я буду иметь утечку памяти это будет (SizeOf (Matrix)) байт, которые были выделены у оператора + функции на линии
sum = new Matrix;
Так я хочу получить ответ, что указует на то, как я может избежать утечки памяти во втором случае.
Повторяю, что реализация не очень хорошая, но я сделал это просто, чтобы показать проблему, которая у меня есть. Также у меня могли быть только указатели на матрицу в главном и сделать все функции Matrix возвратными указателями матрицы. Это позволило бы решить многие проблемы, но я хочу решение для этого конкретного случая.
'' оператор + должен возвращать новый объект, а не ссылка. – juanchopanza