Привет всем!!!
Заранее благодарю за чтение сообщения и ответ!
Меня шокировало то, что я узнал продеббагив в ассемблерном коде прожку (пишу м 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', "никто" не перезаписывает --> правильность лишь кажется...
Пожалуйста, объясните мне смысл операторов +, -, / и т.д., если всегда вызывается деструктор!!! Или может я вообще ничего не понимаю....
Большое спасибо!!!
Виген