Подтвердить что ты не робот

С++: как работает членское присвоение?

Возможный дубликат:
Как члены массива C обрабатываются в функциях управления копированием?

Если я не переопределяю operator = класса, он будет использовать назначение по умолчанию по умолчанию.

Но что это значит?

struct A {
    int array[100];
};
A a;
A b=a;

Ошибка. Как b справляется с a 's array? Обычно array_b = array_a недействителен.

Другой пример:

struct A {
    vector<int> vec;
};
A a;
A b=a;

Как b справляется с a 's vec? Через назначение (vec_b = vec_a), конструктор (vec_b = vector<int>(vec_a)) или другой тайный способ?

4b9b3361

Ответ 1

A b=a;

Не назначается, он называется Инициализация копирования.

Вызывается неявно созданный экземпляр копии для создания нового объекта b из существующего объекта a.
Неявно созданный экземпляр копии создает копию элемента array.

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

С++ 03 Стандарт: 12.8 (Копирование объектов класса)

Каждый подобъект копируется в соответствии с его типом:

  • Если подобъект имеет тип класса, используется конструктор копирования для класса;
  • , если подобъектом является массив, каждый элемент копируется в соответствии с типом элемента;
  • Если подобъект имеет скалярный тип, используется встроенный оператор присваивания.

Ответ 2

Если члены имеют конструкторы копирования, они вызываются. Если нет, конструктор копии по умолчанию выполняет эквивалент memcpy. См. Назначение и инициализация по-умолчанию.

В случае массивов без указателей каждый элемент копируется.