Unless they are modified: const reference. Otherwise you cannot pass a temporary object as in:<p><pre><code>  void foo(const std::shared_ptr&lt;int&gt;&amp; p);

  ...

  foo(std::make_shared&lt;int&gt;(23));
</code></pre>
This will not compile with<p><pre><code>  void foo(std::shared_ptr&lt;int&gt;&amp; p);
</code></pre>
since a temporary object cannot be implicitly converted to a non-const reference, only to a const one.