Почему clear (), используемая для вектора векторов, не очищает значения этих векторов?

Я был настолько уверен, что 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 их предыдущий размер + новые размеры (добавление старого и нового)

-5

Решение

Векторный объект имеет три указателя: начало, конец и конец зарезервированного хранилища.

clear() Метод вызывает деструктор для каждого содержащегося в нем объекта, а затем устанавливает указатель конца на начало.

Таким образом, данные разрушенных объектов все еще будут видны (например, с помощью отладчика) в зарезервированном хранилище.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector