Оператор копирования

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Аватара пользователя
Vladimir89
Сообщения: 75
Зарегистрирован: 21 май 2007, 02:25

23 окт 2007, 22:55

Ктонибудь знает почему для своего класса нужно писать собственный рператора копирвоания ? Просто спросили почему при копировании классическим выдается ошибка (или считается неправильно)
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

24 окт 2007, 10:18

Если оператор копирования для класса не определен, то "по умолчанию" при использовании в тексет присвоения одного экземпляра класса другому присиходит банальное копирование всех полей. Если поля класса, скажем, числа или имеют тип класса, в котором определен оператор копирование, то ничего страшного не произойдет.
Но если, скажем, в экземпляре класса есть указатель на какуе-то динамическую область памяти, то это значение также будет просто скопировано, и два экземпляра класса будут ссылаться на одну и ту же область памяти. Что может привести к очень печальным последствиям (например, при удалении одного из экземпляров он, скорее всего, освободит эту динамическую память, а второй экземпляр будет по-пежнему ссылаться уже "в никуда").
В подобных случаях в операторе присвоения делается выделение (или перевыделение памяти и копирование ее содержимого из первого экземпляра во второй).

PS. Кстати, есть еще такое понятие как copy constructor. Где-то в чем-то близкое оператору присвоения, но, все-таки, совсем другое :)
Ответить