Конструктор - копия - Большая Энциклопедия Нефти и Газа, статья, страница 2
Если бы у треугольника был Бог, Он был бы треугольным. Законы Мерфи (еще...)

Конструктор - копия

Cтраница 2


Конструктор копии инициализирует объект, используя другой объект того же класса. Конструктор копии вызывается также всякий раз, когда необходимо копирование объекта: при вызове по значению и при возврате объекта из вызванной функции.  [16]

Конструктор копии работает аналогично конструктору преобразования, за исключением того, что он просто копирует элемент length из исходного объекта String в объект-адресат String. Заметим, что конструктор копии выделяет новую область памяти для внутреннего представления строки символов объекта-адресата. Если бы он просто копировал sPtr в исходном объекте в sPtr объекта-адресата, то оба объекта указывали бы на одну и ту же динамически распределенную область памяти. Выполнение первого же деструктора в дальнейшем уничтожило бы динамически выделенную область памяти и указатели ptr остальных объектов оказались бы неопределенными, что привело бы к ситуации, способной вызвать серьезную ошибку выполнения.  [17]

18 Тестер для проверки класса String ( часть 5 из 7. [18]

Конструктор копии работает аналогично конструктору преобразования за исключением того, что он просто копирует элемент length из исходного объекта класса String в объект-копию String. Обратите внимание, что конструктор копии заново выделяет память для внутренней строки символов объекта-копии. Если бы он просто скопировал sPtr из исходного объекта в sPtr объекта-копии, то оба объекта указывали бы на ту же самую область памяти. При первом вызове деструктора динамически выделенная память была бы очищена и sPtr другого объекта стал бы неопределенным.  [19]

Заметим, что конструктор копии должен использовать вызов по ссылке, а не вызов по значению. В противном случае вызов конструктора копии приведет к бесконечной рекурсии, потому что при вызове по значению должна быть создана копия объекта, передаваемого конструктору копии, что приводит снова к вызову конструктора копии.  [20]

Конструктор копии - функция-элемент Array - увеличивает значение счетчика arrayCount; копирует из массива значение size, использующееся для инициализации массива, в элемент данных size; использует new для получения свободного места под хранение внутреннего представления этого массива и присваивает ptr значение указателя, возвращаемого new; использует assert для проверки успешности вызова new; использует цикл for для копирования всех элементов массива-инициализатора в этот массив. Важно отметить, что, если конструктор копии просто копирует ptr объекта-источника в ptr создаваемой копии, то оба объекта могут указывать на одну и ту же область динамически размещаемой памяти. Первый вызов деструктора должен был бы после этого очистить динамически выделенную память, и другие объекты, на которые ссылается ptr, стали бы неопределенными. Такая ситуация чаще всего вызывает серьезную ошибку при выполнении программы.  [21]

22 Определения функций-элементов класса Date ( часть 4 из 6. [22]

Перегруженная операция префиксного инкремента возвращает копию текущего объекта с измененной датой. Это происходит, потому что текущий объект this, возвращается как объект класса Date, что активизирует конструктор копии.  [23]

Перегруженная операция преинкремента возвращает приращенную копию текущего объекта. Это происходит потому, что текущий объект, this, возвращается как Date, Это фактически вызывает конструктор копии.  [24]

Заметим, что конструктор копии должен использовать вызов по ссылке, а не вызов по значению. В противном случае вызов конструктора копии приведет к бесконечной рекурсии, потому что при вызове по значению должна быть создана копия объекта, передаваемого конструктору копии, что приводит снова к вызову конструктора копии.  [25]

Заметим, что конструктор копии должен использовать вызов по ссылке, а не вызов по значению. В противном случае вызов конструктора копии приведет к бесконечной рекурсии, потому что при вызове по значению должна быть создана копия объекта, передаваемого конструктору копии, что приводит снова к вызову конструктора копии.  [26]

Он инициализирует объект Array копированием существующего объекта Array. Такое копирование должно выполняться осторожно, чтобы избежать ловушки получения двух объектов Array, указывающих на одну и ту же динамически выделенную память, т.е. здесь та же самая проблема, что и при поэлементном копировании элементов данных по умолчанию. Конструктор копии вызывается всякий раз, когда необходимо копирование объекта: при вызове по значению, при возврате объекта из вызванной функции; при инициализации, когда один объект копируется в другой объект того же класса.  [27]

Она задает начальные значения объекту класса Array путем копирования существующего объекта класса Array. Такое копирование должно выполняться весьма тщательно, чтобы избежать ловушки, состоящей в том, что оба объекта типа Array указывают на одну и ту же динамически распределенную область памяти; точно такая же проблема возникла бы с побитовым копированием по умолчанию. Конструкторы копии вызываются всякий раз, когда возникает необходимость в копировании объекта, например, при вызове по значению, когда объект возвращается из вызванной функции, или при инициализации объекта, который должен быть копией другого объекта того же самого класса.  [28]

Конструктор копии используется, чтобы в качестве начальных значений элементов одного объекта задать значения элементов другого объекта того же класса. Конструктор копии вызывается всякий раз, когда возникает необходимость в копировании объекта, например, при вызове по значению, когда объект возвращается из вызванной функции, или при инициализации объекта, который должен быть копией другого объекта того же самого класса. Конструкторы копии должны получать свои параметры по ссылке.  [29]



Страницы:      1    2