Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Print ( a2 ) ;



/* значение переменной объекта 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...