H_C>Что делать есть либа требует передачи в функцию raw поинтера и освобождения его в callback — никак его в smart pointer не завернешь.
В boost::intrusive_ptr завернешь
[UPD]
Ну или положить в сам объект shared_ptr на самого себя. При отдаче в либу — устанавливать, при освобождении из либы — делать ему reset.
Как много веселых ребят, и все делают велосипед...