Я был настолько уверен, что vector вызывает деструкторы содержащихся объектов, что я просто использовал clear () на главном векторе, а затем повторно использовал вектор, и значения векторов, хранящихся в нем, не были очищены …
РЕДАКТИРОВАТЬ — код:
vector<vector<int> > flush1;
flush1.reserve(4);
for(int i = 0; i != 4; ++i) flush1[i].reserve(7);
flush1.clear();
flush1[0].push_back(some_int);
flush1[1].push_back(some_int);
flush1[2].push_back(some_int);
flush1[3].push_back(some_int);
cout the size from flush1[0-3];
flush1.clear();
и опять
flush1[0].push_back(some_int);
flush1[1].push_back(some_int);
flush1[2].push_back(some_int);
flush1[3].push_back(some_int);
и couting размер из flush1 [0-3] cout-s их предыдущий размер + новые размеры (добавление старого и нового)
Векторный объект имеет три указателя: начало, конец и конец зарезервированного хранилища.
clear()
Метод вызывает деструктор для каждого содержащегося в нем объекта, а затем устанавливает указатель конца на начало.
Таким образом, данные разрушенных объектов все еще будут видны (например, с помощью отладчика) в зарезервированном хранилище.
Других решений пока нет …