Другой способ сделать это - использовать комбинацию операторов &
и *
:
boost::shared_ptr<foo> foo_ptr(new foo());
c_library_function( &*foo_ptr);
Хотя лично я предпочел бы использовать метод get()
(это действительно правильный ответ), у него есть одно преимущество: его можно использовать с другими классами, которые перегружают operator*
(разыменование указателя), но не предоставить get()
метод. Может быть полезным, например, в шаблоне универсального класса.