Здравствуйте Гарин Георгий, Вы писали:
ГГ> Здравствуйте. 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 портить нельзя ну и ...
Если хочеться соптимизировать процесс и избавиться от создания/разрушения лишнего экземляра класса, лучше наверно перегрузить оператор *= :