В вашем коде нет утечки. Чтобы произошла утечка, вы должны потерять ссылку на выделенную память. В вашем случае вы больше ничего не делаете с выделенной памятью, но сохраняете ссылку на нее. Поэтому Leaks считает, что вы можете потенциально освободить его позже в какой-то момент, и не считает это утечкой. (Напоминаем, что утечка - это когда вы выделяете память, а затем удаляете указатель, не освобождая память.)
Эта программа должна рассердить Утечек:
int main()
{
int* foo = new int[10];
foo = NULL;
sleep(60);
}
Как видите, адрес памяти, возвращаемый new int[10]
, безвозвратно теряется при перезаписи foo
на NULL
. Поэтому, Утечки должны заметить это.
Утечки не является инструментом статического анализа. Он не знает, что ты собираешься делать со своими указателями. Все, что он знает, это то, что на каждый блок выделенной памяти все еще есть ссылки.
Утечки также не инструмент в реальном времени. Это не находит утечки, как только они происходят. Вместо этого, каждые 10 секунд или около того, он останавливает программу, сканирует ее память и пытается найти ссылки на все выделенные ей блоки памяти. Если он не находит ничего для определенного блока, он помечает его как утечку. Поэтому, если выполнение вашей программы длится менее 10 секунд, очевидно, что Leaks не найдет ничего полезного.