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]