Иногда уже не выкрутиться явным списком: можно нарваться на замкнутый круг: объект никому не нужен, но ещё висит в списке, и никогда не будет определено, что он уже не нужен (потому что в списке-то он есть!)
Тут уже приходим к нужности "мягких ссылок" (weak pointers): которая указывает на объект, но не является якорем. Т.е. становится невалидной, когда объект соберёт сборщик.
Такие ссылки сделать несложно, но нужна интеграция со сборщиком мусера. Это было сделано в Active BlackBox...