Страницы

Поиск по вопросам

понедельник, 30 декабря 2019 г.

Освобождение памяти

#cpp #память #stl


Есть вектор указателей на объекты. Как лучше всего освобождать память: free, delete
или erase?
    


Ответы

Ответ 1



Начнем с того, что free категорически противопоказан. Это C-шная функция, работающая только в паре с malloc. erase - это функция, которая удаляет элементы из вектора. Но поскольку у вас вектор указателей, то автоматически память, на которую они указывают, освобождаться не будет (ведь вас это интересует?) Так что надо перед erase пробежаться и освободить объекты самому. Если хотите, чтобы все делалось надежно и просто - используйте unique_ptr (если вектор единолично :) владеет объектами; если нет - shared_ptr<>).

Ответ 2



Есть еще вариант использовать std::vector<Тип>().swap(Ваш_вектор);

Ответ 3



Если ваш объект, содержащий вектор, отвечает за уничтожение хранящихся в нем объектов, то конечно, delete

Комментариев нет:

Отправить комментарий