Consider the following vector:

```
std::vector<std::shared_ptr<X>> myVector;

```

and the following two functions that add a given element to the vector:

```
void foo1(std::shared_ptr<X> x)
{
    myVector.push_back(x);
}

void foo2(const std::shared_ptr<X>& x)
{
    myVector.push_back(x);
}

```

My understanding is that both functions push a `shared_ptr` to `X` into the vector and thus increment the ref count of `X`. The first function results in an additional increment and decrement of the reference count but this is needless.

Is my understanding correct? Is the second option therefore preferable?