Кто-нибудь знает "технику", чтобы обнаружить утечки памяти, вызванные умными указателями? В настоящее время я работаю над большим проектом, написанным на С++, который сильно использует интеллектуальные указатели с подсчетом ссылок. Очевидно, что у нас есть некоторые утечки памяти, вызванные интеллектуальными указателями, которые все еще упоминаются где-то в коде, так что их память не освобождается. Очень сложно найти строку кода с "ненужной" ссылкой, которая заставляет соответствующий объект не быть свободным (хотя он больше не используется).
Я нашел несколько советов в Интернете, которые предлагали собирать стопки вызовов операций инкремента/декремента эталонного счетчика. Это дает мне хороший совет, какой фрагмент кода заставил контрольный счетчик увеличиваться или уменьшаться.
Но мне нужен какой-то алгоритм, который объединяет соответствующие "стопки вызовов увеличения/уменьшения". После удаления этих пар стеков вызовов, я надеюсь, есть (по крайней мере) один "увеличивающий стек вызовов", который показывает мне часть кода с "ненужной" ссылкой, которая не позволяет освободить соответствующий объект. Теперь не составит труда исправить утечку!
Но есть ли у кого-нибудь идея для "алгоритма", который выполняет группировку?
Разработка происходит под Windows XP.
(Надеюсь, кто-то понял, что я пытался объяснить...)
EDIt: Я говорю об утечках, вызванных циркулярными ссылками.