Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2011, 13:55   #11
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
f.hump, я не понимаю, чем хуже мой код
тут уже говорили, что если код работает то имеет право на жизнь.. возможно.
возможно перегрузка операторов это на любителя.
ну, давайте посмотрим на ваш код еще раз.

предположим надо сложить А и В и и сохранить в С.
с перегрузкой операторов можно это записать так
Код:
С = А + В;
вашим методом
Код:
С.Plus(A,B);
В вашей реализации Plus возвращает не ссылку а объект. При таком раскладе, если я правильно понимаю будет создан временный объект Matrix, поскольку конструктор по умолчанию вы не прописали то времменый Matrix будет инициализирован каким-нибудь бусором, и конечно же не выделит никакой памяти. Дальше, когда ваша процедура дойдет до точки retrun *this будет выполнена операция присвоения (которую вы тоже не прописали) результата временному объекту, просто копируя поля объекта. И в финале, если вы не используете результата функции, будет вызван непрописанный деструктор для временного объекта, который не освободит вашу динамически выделенную память. (хотя, конечно, для временного объекта она и не выделялась).
Поэтому если не хочется бороться с операторами сделайте Plus типа void, и напишите деструктор, чтобы память освобождать.

В предложенном мной примере, при выполненнии операции сложения создается временный объект - точная копия другого объекта. Собственно для создания копии объекта и нужен коструктор копирования. Если вы не пропишите этого конструктора компилятор создаст его за вас, но тут нужно понимать что компилятор не знает о чем вы думали когда писали свой код. Поэтому чтобы не просто скопировать значения полей, а выделить память под Matr и скопировать содержание Matr объекта копия которого необходима, и нужно явно прописать конструктор копирования.

Последний раз редактировалось f.hump; 23.08.2011 в 13:59.
f.hump вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические двумерные массивы Razdolbam Помощь студентам 0 14.03.2011 15:37
Двумерные массивы (матрицы) Zevsnet Помощь студентам 0 01.12.2010 09:23
динамические матрицы и списки(паскаль) андреич Помощь студентам 1 08.05.2010 21:48
двумерные массивы(матрицы) dunvegan Помощь студентам 4 05.11.2007 14:32