Классу std::vector
может потребоваться перераспределить базовый динамический массив, когда вы повторно вызываете push_back()
для добавления новых элементов. Обычная стратегия заключается в том, чтобы std::vector
увеличивал размер базового буфера с коэффициентом, возможно, с коэффициентом 2
.
Когда происходит такое перераспределение, вызывается конструктор копирования (или конструктор перемещения, если вы его определили и используете c++0x
) для копирования элементов вектора из старого буфера в новый.
Ваш конструктор копирования на самом деле не копирует должным образом, вы должны назначить параметр num_IN
:
a_class(a_class const& src): num_IN(src.num_IN) {}
Как правило, в контейнерах STL
хранимые типы данных должны подчиняться «правилу из трех », так как конструктор, конструктор копирования, оператор присваивания и деструктор работают надежно.
С семантикой перемещения в c++0x
Полагаю, это должно быть расширено до "правила пяти" в том смысле, что вы также должны учитывать правильно определенные конструкторы перемещения и операторы присваивания перемещения.