Encontre vazamentos de memória causados por ponteiros inteligentes

Alguém conhece uma "técnica" para descobrir vazamentos de memória causados por ponteiros inteligentes? Atualmente, estou trabalhando em um grande projeto escrito emC ++ que usa muito ponteiros inteligentes com contagem de referência. Obviamente, temos alguns vazamentos de memória causados por ponteiros inteligentes, que ainda são referenciados em algum lugar do código, para que a memória deles não seja liberada. É muito difícil encontrar a linha de código com a referência "desnecessária", que faz com que o objeto correspondente não seja liberado (embora não seja mais útil).

Encontrei alguns conselhos na web que propunham coletar pilhas de chamadas das operações de incremento / decremento do contador de referência. Isso me dá uma boa dica: qual parte do código fez com que o contador de referência aumentasse ou diminuíss

Mas o que eu preciso é de algum tipo de algoritmo que agrupe o correspondente "aumento / diminuição de pilhas de chamadas". Depois de remover esses pares de pilhas de chamadas, espero ter (pelo menos) uma "pilha de chamadas de aumento" restante, que me mostre o trecho de código com a referência "desnecessária", que causou a liberação do objeto correspondente. Agora não será grande coisa para consertar o vazamento!

Mas alguém tem uma idéia para um "algoritmo" que faz o agrupament

desenvolvimento ocorre sobWindows XP.

(Espero que alguém entenda, o que tentei explicar ...)

EDIt: Estou falando de vazamentos causados por referências circulare

questionAnswers(12)

yourAnswerToTheQuestion