Существуют различные методы для отслеживания утечек памяти.
Самое простое - это использовать макрос и специальный распределитель, который будет хранить функцию, которая выделяет это.Таким образом, вы можете отслеживать каждое распределение и видеть, какие не удаляются, когда они должны быть.Затем вы можете начать писать unittest и утверждать, что память была освобождена.
Если вы все время используете предварительно скомпилированные контейнеры, это не будет работать, поскольку все выделения будут в контейнерах.Тогда вы можете выбрать следующие параметры:
- Использовать локальное значение потока, чтобы идентифицировать подсистему или идентификатор класса (в отладочных сборках), который работает, чтобы ваш распределитель мог определить, кто выделяет память.Вы даже можете использовать стек для иерархического отслеживания использования памяти в вашем движке.
- На самом деле получить стек вызовов и сохранить его, если ваш компилятор имеет достаточную поддержку.
- Использовать пулы памяти для подсистем,и измерить, увеличивается ли их размер непропорционально.(Это также (заведомо плохой) обходной путь для утечки памяти, поскольку вы можете освободить весь пул за один раз, таким образом освобождая утечку памяти, если сможете).
- В Windows есть несколько макросовкоторые отслеживают распределение памяти по исходной строке автоматически при отладочных сборках.
Вероятно, есть больше параметров, чем это.Тестирование и использование пользовательского глобального переопределения нового / удаления (которое может быть запрошено) должно оказаться полезным, если ваш дизайн это позволяет.
Кроме того, см. Документ Electronic Arts STL C ++ длянекоторое обсуждение того, что нужно сделать в STL / C ++ для поддержки правильной разработки игр.(Возможно, он немного более хардкорный, чем ваш движок, но он, безусловно, содержит много самородков вдохновения и изобретательности.)