Здравствуйте Гарин Георгий, Вы писали:
ГГ>Здравствуйте Аноним, Вы писали:
А>>Здравствуйте Гарин Георгий, Вы писали:
ГГ>>> Здравствуйте. I need help.
ГГ>>> Перегрузил операции присваивания и умножения для класса многочленов.
А>>Скорее всего вы используете конструкцию типа C = A * B и соответственно результат A * B помещается сначала в некую временную переменную, которая затем присваивается в C, и после присваивания для нее (врем. пер.) вызывается деструктор.
А>>Т.е. фактически получается:
А>>MyClass *TMP = new MyClass(operator*(A, B)); // или A.operator*(B) (это не важно)
А>>C.operator=(*TMP);
А>>delete TMP;
ГГ> Да, видимо так оно и происходит. Но вызывается несколько деструкторов для А,В,что-то еще (наверное эта временная переменная) и С. Вот поэтому-то я и просил кусок кода, чтобы посмотреть как это делается by example.
ГГ> ps: А это не может происходить из-за передачи параметров. Т.е. в справочнике написано, что надо передавать параметры по ссылке, может я в этом напутал...
ГГ>Все равно спасибо
Вот пример, может не очень оптимальный...
const String String::operator+(const String& s1)
{
String temp;
delete [] temp.data;
temp.data = new char[strlen(data)+strlen(s1.data)+1];
strcpy(temp.data, data);
strcat(temp.data, s1.data);
return temp;
}
Только возвращать по ссылке нельзя!!!