Операторы в C++
От: Vigen  
Дата: 20.01.03 15:30
Оценка: 2 (1)
Привет всем!!!
Заранее благодарю за чтение сообщения и ответ!
Меня шокировало то, что я узнал продеббагив в ассемблерном коде прожку (пишу м MS VC++ .NET)...

Есть класс mpint (multi precision integer). Соответственно имплементированны операторы суммы, вычитания, умножения и т.д.. Память для хранения данных резервируется в классе динамически. И тут-то номер! Вызывая оператор сложения получаем ошибку с памятью. Пример:


mpint a("123"), b("1AF"), c;
c=a+b;  //не работает

//Из класса mpint...
mpint::operator+(mpint &val)
{
   mpint tmp(this);
   //здесь код сложения
   return tmp;
}


Ошибка в том, что до того как вернуть 'tmp' в виде суммы 'a' и 'b', вызывается деструктор 'tmp', который уничтожает результат суммы.
Пробуя статическое выделение памяти для хранения данных класса, ошибок с памятью нет, но это лишь кажущаяся "правильность": деструктор 'tmp' все равно вызывается. Просто эта память, выделенная изначально под 'tmp', "никто" не перезаписывает --> правильность лишь кажется...

Пожалуйста, объясните мне смысл операторов +, -, / и т.д., если всегда вызывается деструктор!!! Или может я вообще ничего не понимаю....
Большое спасибо!!!
Виген
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.