Утечка памяти (вроде) со статическим std :: vector - PullRequest
6 голосов
/ 22 мая 2009

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

_CrtMemState state;
_CrtMemCheckpoint( & state);
_CrtMemDumpAllObjectsSince( & state );

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

В деструкторе класса, содержащего вектор, я удаляю объект, который помещаю в вектор. Тем не менее, память, выделенная во время вставки, по-прежнему висит. Есть ли способ удалить это место?

Ответы [ 3 ]

16 голосов
/ 22 мая 2009

Вы можете поменять вектор на пустой - это освободит память.

См. Также Q: Сокращение вектора

8 голосов
/ 22 мая 2009

Чтобы добавить к тому, что написал Джеймс. Он хочет сделать это:

std::vector<T>().swap(v);

где 'v' - вектор, память которого вы хотите освободить.

0 голосов
/ 23 мая 2009

Это всего лишь причуда Visual Studio. Векторный деструктор освобождает память, но модуль проверки памяти не всегда обнаруживает ее, поэтому жалуется. Это немного больно, но не о чем беспокоиться.

...