«Правильный» способ освободить объект std :: vector - PullRequest
34 голосов
/ 16 июня 2010

Первое решение:

std::vector<int> *vec = new std::vector<int>;
assert(vec != NULL);
// ...
delete vec;

Альтернатива :

std::vector<int> v;
//...
vec.clear();
vec.swap(std::vector<int>(vec));

Второе решение немного хитрое - что за "правильный "способ сделать это?

Обновление:

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

Ответы [ 12 ]

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

Хотя оба, похоже, работают, я не вижу причин не просто вызывать delete на указателе. Вектор должен иметь вызываемый деструктор, который будет обрабатывать все остальное.

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

Удалить освобождает память, память освобождается для следующего объекта, но вектор исчез.

Второй трюк освобождает лишнюю память, но оставляет вектор нетронутым, но пустым.

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