Да, вы можете передать его по ссылке.
Однако, если функция просто хочет использовать управляемый объект, вы можете рассмотреть возможность передачи ссылки на сам объект.
void foo(const boost::scoped_ptr<Object>& o)
{
o->foobar();
}
void bar(const Object& o)
{
o.foobar();
}
Разница в том, что в первом случае вы связали функцию с определенным типом интеллектуального указателя.
Object o;
boost::scoped_ptr<Object> scoped(new Object);
boost::shared_ptr<Object> shared(new Object);
foo(o); //no
foo(scoped); //OK
foo(shared); //no
bar(o); //OK
bar(*scoped); //OK
bar(*shared); //OK
Обычно я пропускаю scoped_ptr
только в том случае, если намерение сделать что-то с самим экземпляром scoped_ptr
(например, освободить или сбросить ресурс). Аналогично для shared_ptr
(например, функция хочет поделиться ресурсом с другими общими указателями).