Вопрос

просто быстрый вопрос, если у вас есть:

using namespace std;

map< int, vector< string > > map1;
.

или, может быть, даже:

map< int, map< int, vector< string > > > map2;
.

и просто так вы получаете правильную идею:

map< int, map< int, map< int, vector< string > > > > map3;
.

Если я сделаю только только:

map1.clear();
map2.clear();
map3.clear();
.

Это безопасно в том, что он будет опустошено все на карте и его вложенные карты, векторы, списки и т. Д.?

Примечание: Я знаю, используете ли вы указатели, которые вам нужно вручную пройти и удалять или если карта выходит из приспособления, она должна быть в порядке, я тоже особенно заинтересован в этом случае, когда в области и на стеке.

Это было полезно?

Решение

Да, карта будет разрушать все компоненты.

Если его компоненты являются контейнерами STL, их деструкторы очистите контейнеры.

Подробнее о stl контейнеры в частности, о деструктор std::map

Другие советы

Да, это прекрасно безопасно.Контейнеры STL заботятся о управлении памятью.

Однако, если вы храните указатели на объекты, которые вы выделили, вам также нужно удалить их сами:

std::vector<MyClass*> vec;
vec.push_back(new MyClass());
vec.clear(); // you get a memory leak here because you did not delete the object you allocated.
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top