Re: Перегрузка операций
От: Аноним  
Дата: 23.01.02 09:06
Оценка:
Здравствуйте Гарин Георгий, Вы писали:

ГГ> Здравствуйте. I need help.

ГГ> Перегрузил операции присваивания и умножения для класса многочленов. Но при отладке выяснилось, что при выходе из каждой операции происходит вызов деструктора. Возможно, точнее наиболее вероятно, что-то написал не так. Отсюда просьба: Не мог бы кто-нибудь дать кусок кода, с перегрузкой операций.
ГГ> Заранее спасибо.
Скорее всего вы используете конструкцию типа C = A * B и соответственно результат A * B помещается сначала в некую временную переменную, которая затем присваивается в C, и после присваивания для нее (врем. пер.) вызывается деструктор.
Т.е. фактически получается:

MyClass *TMP = new MyClass(operator*(A, B)); // или A.operator*(B) (это не важно)
C.operator=(*TMP);
delete TMP;

Так делается потому, что после умножения, но до операции присваивания результат где-то хранить надо, а переменные A и B портить нельзя ну и ...
Если хочеться соптимизировать процесс и избавиться от создания/разрушения лишнего экземляра класса, лучше наверно перегрузить оператор *= :

A *= B;

WBR, AND
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.