Что произойдет после исправления ошибки:
std::vector<Foo> myVector;
myVector.reserve(10);
myVector.push_back(bar);
означает, что у вас есть два экземпляра Foo
, указывающих на один и тот же буфер data
.Возможно, он будет работать некоторое время, но в конечном итоге оба объекта будут уничтожены, деструктор вызывается дважды (или более, в зависимости от того, нужно ли vector
перемещать содержимое), и буфер освобождается дважды, что приводит кнеопределенное поведение (что обычно означает сбой).
Чтобы обратиться к начальному содержимому vector
, он копирует конструкцию, которую вы передаете в качестве параметра (по умолчанию этот параметр создается по умолчаниюобъект, но не обязательно):
std::vector<Foo> myVector(10, bar); // 10 copies of bar