Многие пользуются shared_ptr, немногие - Boehm GC, а почему не объединить их преимущества, сделав mark-n-sweep на умных указателях? Это бы решило проблемы обоих вариантов (вероятно, за счёт большего расхода памяти).
Или такой вариант применяется, просто я не встречал?