I use std::tr1::shared_ptr extensively throughout my application. This includes passing objects in as function arguments. Consider the following:
class Datas
Always pass your shared_ptr by const reference:
void f(const shared_ptr& pds) {...}
void g(const shared_ptr& pds) {...}
Edit: Regarding the safety issues mentioned by others:
shared_ptr heavily throughout an application, passing by value will take up a tremendous amount of time (I've seen it go 50+%).const T& instead of const shared_ptr& when the argument shall not be null.const shared_ptr& is safer than const T* when performance is an issue.