Visual Studio 2012 говорит мне, что следующая программа имеет утечки памяти. Правильно ли это и если да, то как я могу избежать утечек памяти при использовании (например) статических векторов?
#include <crtdbg.h>
#include <vector>
struct A {
static std::vector<int> a;
};
std::vector<int> A::a;
int main()
{
_CrtDumpMemoryLeaks();
return 0;
}
Вы вызываете функцию до завершения статической переменной. И поэтому вам не следует ожидать, что переменная была уничтожена.
Вам нужно подождать, пока область действия не закончится, прежде чем вы вызовете эту функцию. Конечно, это трудно сделать, но время выполнения может помочь вам, как описано в документации:
Функция может быть вызвана автоматически при завершении программы, включив бит-бит _CRTDBG_LEAK_CHECK_DF-поля флага _crtDbgFlag с помощью функции _CrtSetDbgFlag.