Будет ли называться деструктор? - PullRequest
1 голос
/ 04 июня 2010

Если я создаю вектор вектора вектора, если я очищаю первый вектор или первый вектор удаляется, все дочерние векторы вызовут деструктор и освободят память или это вызовет утечку памяти? Спасибо

Ответы [ 4 ]

5 голосов
/ 04 июня 2010

Если у вас есть:

vector <vector <vector <int> > > > v;
v.clear();

тогда деструкторы будут вызываться соответственно для всех подвекторов.

3 голосов
/ 04 июня 2010

Будет утечка памяти, только если вы использовали new для создания содержащихся векторов. Вызов clear() для вектора НЕ вызовет delete для содержащихся элементов.

2 голосов
/ 04 июня 2010

STL предлагает только семантику значения.Это означает, что вам не следует беспокоиться о распределении / освобождении памяти, если вы не помещаете указатели в свои контейнеры.Объекты уничтожаются при удалении из контейнера, а также при уничтожении (или очистке) самого контейнера.

Это также означает, что многие операции с этими контейнерами будут включать (по умолчанию) создание, копирование и удаление объектов.

0 голосов
/ 04 июня 2010

Да. Будет вызван деструктор и память будет освобождена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...