2016-07-17 7 views
2

Так что есть вектор векторов, который ворохи выделяются:Удаления куча выделена 2-мерный вектор

std::vector<std::vector<int>>* matrix = new std::vector<std::vector<int>>(); 

После ввода значительного количества данных в matrix. Каков правильный способ удаления этого объекта?

delete matrix освобождает все внутренние векторы?

+3

Да, но почему вы динамически выделяете вектор в первую очередь? Это действительно редко имеет смысл. –

ответ

6

Да delete matrix; будет в порядке.

Возможно, вам стоит рассмотреть возможность динамического выделения вашего вектора. Векторы всегда хранят свои данные в свободном хранилище (куче), поэтому по этой причине им не нужно динамически выделяться. У них очень маленький стоп-стоп.

Если вы должны выделить свой вектор динамически, то вы должны серьезно рассмотреть вопрос об использовании смарт-указатель такие как std::unique_ptr или std::shared_ptr, то вам не нужно будет позвонить delete на всех:

auto matrix = std::make_unique<std::vector<std::vector<int>>>(); 
+0

Я буду обращаться, если мне нужно динамически выделять вектор в другом вопросе. Спасибо. –

2

Да, это так. delete matrix вызывает деструктор std::vector<std::vector<int>> перед возвратом памяти. Деструкторный вызов вызовет деструктор всех его элементов, std::vector<int>.

Кроме того, большинство использования std::vector не потребует от вас создания его в куче. Я подозреваю то же самое с вашим делом.

Смежные вопросы