Что происходит, когда я делаю присваивание объекту, у которого есть конструктор копирования, но нет оператора присваивания?

Что происходит, когда я делаю присваивание объекту, у которого есть конструктор копирования, но нет оператора присваивания?
Будет ли он вызывать оператор присваивания компилятора, выполняющий элементное копирование?

0

Решение

Конструктор копирования не играет никакой роли в присваивании, будет вызван оператор присваивания по умолчанию, который будет делать побитовую копию встроенных членов типа и оператора присваивания вызова для членов объекта class тип.

1

Другие решения

Все классы имеют оператор присваивания, если вы явно не удалили его (невозможно до C ++ 11). Если вы не предоставите свою собственную реализацию, компилятор предоставит ее вам.

Это главная причина правило трехЕсли у вас есть конструктор копирования, почти наверняка вам понадобится оператор присваивания и деструктор.

2

Да, вы получите доступ к генератору операторов присваивания по умолчанию компилятором, если вы его не предоставите.

Но в целом, если класс определяет одно из следующего, он, вероятно, должен явно определить все три

  • деструктор
  • конструктор копирования
  • оператор копирования
1

Я не знаю, что вы подразумеваете под присваиванием (в контексте компилятора). Итак, позвольте мне попробовать на примере. Допустим, у нас есть класс Test;

Test a,c;          //default constructor would be called for both.

Test b = a;        //copy constructor would be called for b as we are creating that object.

c = b;             //assignment operator would be called for c as we are changing content's of c.

Итак, если класс Test содержит простые объекты, то не имеет значения, если вы определите ИЛИ, а не компилятор сделает для вас побитовое копирование. Но если ваш класс содержит указатели, то вы должны явно определить ваш конструктор копирования, оператор присваивания и деструктор.

Надеюсь, я достаточно ясно.

0
По вопросам рекламы ammmcru@yandex.ru