Ты хоть понял, что написал?) Есть объекты, которые в асинхронном C++ коде шарятся с помощью shared_ptr (да еще и с pmr-аллокатором) Как меня спасет boost::intrusive_ptr? Переделок гораздо больше светит
Си-код будет выполнять только асинхронную операцию, а уже затем вызывать мой коллбэк, передавая ему void*-контекст В коллбэке shared_ptr нужен для контроля времени жизни объекта, который мог во всех других местах уже, возможно, уничтожен
Можно им обойтись, хранить intrusive_ptr и передавать сырой указатель на объект; по сырому указателю можно получить обратно inrusive_ptr. Достаточно счетчик руками инкрементнуть при установке коллбека и декрементнуть в коллбеке (не обязательно)