&gt; The assignment into the object will do the copy constructor and that needs a non-const ref.<p>Hum? What assignment into the object? Where I&#x27;d typically see taking a `const std::shared_ptr&lt;&gt; &amp;` to signal &quot;retaining ownership&quot; would be something like this:<p><pre><code>    class Foo {
    public:
        void AppendChild(const std::shared_ptr&lt;Foo&gt; &amp;x) {
            children_.emplace_back(x);
        }
    private:
        std::vector&lt;std::shared_ptr&lt;Foo&gt;&gt; children_;
    };
</code></pre>
Why should Foo:;AppendChild&#x27;s signature be changed to a non-const ref?