Re[3]: Перегрузка операций
От: Trantor Россия  
Дата: 23.01.02 10:34
Оценка:
Здравствуйте Гарин Георгий, Вы писали:

ГГ>Здравствуйте Аноним, Вы писали:


А>>Здравствуйте Гарин Георгий, Вы писали:


ГГ>>> Здравствуйте. 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;
}

Только возвращать по ссылке нельзя!!!
В жизни мало быть умным, надо еще быть не дураком.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.