Вы должны быть осторожны с определением «утечки памяти». Что-то, что выделяется один раз при первом использовании и освобождается при выходе из программы, иногда будет отображаться детектором утечек, потому что он начал считать перед первым использованием. Но это не утечка (хотя это может быть плохой дизайн, так как это может быть какой-то глобальный характер).
Чтобы увидеть, не утечка ли у данного куска кода, вы могли бы разумно запустить его один раз, затем очистить детектор утечки, а затем снова запустить его (это, конечно, требует программного контроля детектора утечки). Вещи, которые «просачиваются» один раз за прогон программы, обычно не имеют значения. Вещи, которые «просачиваются» каждый раз, когда их выполняют, обычно имеют значение в конечном итоге.
Мне редко удавалось достичь нуля по этой метрике, что эквивалентно наблюдению за использованием ползучей памяти в отличие от потерянных блоков. У меня была одна библиотека, в которой она оказалась настолько неудобной, с кешами и мебелью пользовательского интерфейса, и так далее, что я просто трижды запускал свой тестовый набор и игнорировал любые «утечки», которые не возникали в виде кратных трех блоков. Я все еще улавливал все или почти все настоящие утечки и анализировал хитрые сообщения, как только убрал с потолка висящие фрукты. Конечно, слабые стороны использования набора тестов для этой цели заключаются в том, что (1) вы можете использовать только те его части, которые не требуют нового процесса, и (2) большинство обнаруженных вами утечек являются ошибкой кода теста , а не код библиотеки ...