Счетчик должен соответствовать количеству объектов, которые ваша программа имеет в любой момент времени.Каждое разрушение уменьшает количество объектов, и поэтому существует --counter
.Кроме того, каждый конструктор создает еще один объект, увеличивая общее количество объектов, поэтому каждый конструктор должен иметь ++counter
.
Конструктор копирования (по умолчанию или нет) создает новый объект.Очевидно, вы должны убедиться, что конструктор копирования имеет ++counter
.Для этого вы должны реализовать конструктор копирования.
Если вы не определили этот конструктор копирования, то push_back
запускает конструктор копирования, создавая новый объект.Но с конструктором копирования по умолчанию счетчик остается без изменений.В конце концов, временное значение, которое передается в push_back
, удаляется, и счетчик становится 0
, несмотря на наличие объекта в векторе.