Вообще правильно такое делается использованием intrusive_ptr с поддержкой стейтфул делитеров Бустовый не умеет, но его легко научить кастомным intrusive_ref_counter
shared_ptr не хватает ручки unsafe_increment / unsafe_decrement (или unsafe_release() и конструктора с adopt), иначе можно было бы через shared_from_this