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

Конструктор-копировщик

Cтраница 1


Конструктор-копировщик и оператор присваивания по умолчанию предоставляются компилятором, если в классе эти объекты не были созданы пользователем. Но при использовании копировщика и оператора присваивания, заданных по умолчанию, осуществляется только поверхностное копирование данных. В тех классах, где в числе членов класса используются указатели на области динамической памяти, вместо поверхностного копирования лучше использовать глубинное, при котором копируемые данные размещаются по новым адресам.  [1]

Конструктор, конструктор-копировщик и деструктор по-прежнему определены для вывода на экран своих сообщений. Однако конструктор-копировщик ни разу не вызывался, поскольку объект был передан как ссылка и поэтому никаких копий объекта не создавалось. В строке 41 был создан объект со значением возраста, заданным по умолчанию.  [2]

Необходимо, чтобы конструктор-копировщик и оператор соответствовали друг другу.  [3]

Оператор присваивания работает с существующим объектом, а конструктор-копировщик создает новый временный объект.  [4]

В классе должны быть явно определены стандартный конструктор, конструктор-копировщик и перегруженный оператор присваивания.  [5]

Путем создания в классе виртуального метода, который вызывает конструктор-копировщик.  [6]

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

Чтобы функция push back () была работоспособной, в классе Student нужно определить конструктор-копировщик.  [8]

Как уже отмечалось выше, если объект класса Counter требует выделения памяти, необходимо заместить конструктор-копировщик. Но в данном случае конструктор-копировщик, заданный по умолчанию, отлично справляется со своими задачами.  [9]

Поскольку и параметр, и возвращаемое значение передаются как ссылки, никаких копий не создается и конструктор-копировщик не вызывается. Однако указатель в функции FunctionTwoO теперь является константным, следовательно, к нему не может применяться неконстантный метод SetAgeQ. Если обращение к методу SetAgeO в строке 64 не было бы закомментировано, программа не прошла бы этап компиляции.  [10]

На самом деле было бы неправильно говорить, что он не содержит никаких методов, потому что компилятор автоматически назначает ему стандартный конструктор, деструктор, конструктор-копировщик и оператор присваивания (), поэтому у него фактически есть четыре метода, но нет данных.  [11]

Он задает длину новой строки равной длине существующей строки плюс одна ячейка для концевого нулевого символа. Затем конструктор-копировщик копирует существующую строку в новую и добавляет в конце нулевой символ окончания строки.  [12]

Конструктор, конструктор-копировщик и деструктор по-прежнему определены для вывода на экран своих сообщений. Однако конструктор-копировщик ни разу не вызывался, поскольку объект был передан как ссылка и поэтому никаких копий объекта не создавалось. В строке 41 был создан объект со значением возраста, заданным по умолчанию.  [13]

В этой строке делается попытка создать новый объект класса Counter - а, которому присваивается приращенное значение переменной i. Хотя встроенный конструктор-копировщик поддерживает операцию присваивания, текущий оператор инкремента не возвращает объект класса Counter. Сейчас он возвращает пустое значение void. Невозможно присвоить значение void объекту класса Counter.  [14]

Как уже отмечалось выше, если объект класса Counter требует выделения памяти, необходимо заместить конструктор-копировщик. Но в данном случае конструктор-копировщик, заданный по умолчанию, отлично справляется со своими задачами.  [15]



Страницы:      1    2