Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
/* значение переменной объекта a2 копируется с инкрементом в
в переменную локального объекта obj функции (12 ) и это
значение выводится */
a1. ~My(); // вызовом деструктора объект память a1 освобождается
Print (a1); // выведется мусор
Print (a2); // выведется 12
}
Результат:
После вызова деструктора a1 освобождается динамическая память ив данном (*p) – члене объекта a1 содержитсятеперь мусор(операция delete в процессе возврата в систему возвращаемой памяти затирает эту память).
Объект a2 остался неизменным. Так и должно быть.
Если мы удалим из определения класса конструктор копирования, результат работы программы следующий:
Уничтожение объекта a1 привело к уничтожению и его копии a2, в которой находится теперь тот же мусор.
С другой стороны значения переменных теперь выводятся правильно, т.к. конструктор по умолчанию никаких инкрементов естественно не выполняет.
При отсутствии конструктора копирования программа будет использовать конструктор копирования по умолчанию следующего вида:
My (My & obj) { p = obj.p; }
В объекте a1 находится указатель на выделенное обычным конструктором поле памяти.
Побайтовое копирование объекта дает копирование указателя, т.е. в объект a2 заносится тот же самый указатель, оба объекта указывают на один и тот же участок памяти.
Дата публикования: 2014-11-28; Прочитано: 209 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!