Вектор внутри карты понятно безопасно?
Вопрос
просто быстрый вопрос, если у вас есть:
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.
.