When and how to pass smart pointer (C++)

This post is based on a post from Herb Sutter.


When

if (The ownership of the object isn't shared or moved &&
    The lifetime of the object is guaranteed 1)
{
    Pass the object itself by value, raw pointer or reference
}
else
{
    Pass the smart pointer either by value or reference
}

1 The passed object lives longer than it can be used by the receiver.


How

unique_ptr shared_ptr / weak_ptr
By value To move the ownership To share the ownership
By reference To modify the smart pointer (e.g. reset)
By const ref. Don’t, better use a raw pointer / ref. To share the ownership 2

2 Faster than by value, but you have to guarantee the lifetime while passing.