Поскольку вы не реализовали назначение копирования A
, сохранив емкость вектора. Компилятор, сгенерированный копией-присваиванием A
, обеспечивает только копирование элементов вектора. Конструктор копирования (и присвоение копии) вектора не требуется для сохранения емкости исходного векторного объекта. Копирует элементы, сохраняя size
вектора.
Это означает, что если вы определите назначение копирования для A
как:
A& operator = (const A & a)
{
data = a.data;
}
Это все равно напечатало бы 0
.
Вы можете добиться желаемого поведения, реализовав назначение копирования следующим образом:
A& operator = (const A & a)
{
data.reserve(a.capacity());
data.insert(data.end(), a.begin(), a.end());
}
Обратите внимание, что .insert()
только копирует элемент, из-за чего .size()
изменяется, но .capacity
остается неизменным. Вот почему вам нужно явно позвонить .reserve()
.