Напишите функцию, которая очищает ваш список выделенных блоков. Вызывайте его после статической инициализации, но до того, как ваша программа начнет выделять все, что вы хотите отслеживать. Первым делом в main () следует это сделать. Конечно, вы по-прежнему будете видеть утечки для статических векторов, размер которых изменился, поэтому вы можете зарезервировать их больше, чтобы начать в режиме обнаружения утечек. Если статический вектор неумолимо растет со временем, то вы, вероятно, хотите знать об этом и рассматривать его как утечку, даже если он статический.
Редактировать в ответ на комментарий:
Например, вместо одного центрального бита кода для уничтожения всех глобальных переменных во время выключения:
template<typename T>
class Reserve {
Reserve(T &t, typename T::size_type size) {
t.reserve(size);
}
};
static std::vector<int> foo;
static Reserve<std::vector<int> > foo_r(foo, 50);
static std:string bar;
static Reserve<std::string> bar_r(bar, 256);
Возможно, вы можете что-то сделать с шаблоном функции, чтобы вывод типа избавил от необходимости повторять тип. Как насчет:
template<typename T>
int reserve(T &t, typename T::size_type size) {
t.reserve(size);
return 0;
}
static std::vector<int> foo;
static int foo_r = reserve(foo, 50);
static std:string bar;
static int bar_r = reserve(bar, 256);