Igor,
please take a look at my first post. I wrote there: if you can ensure that the reference is not saved. This is an essential pitfall. If you pass a value and bind it to a reference a good compiler will warn you that you are binding a reference to a temporary object. If you pass the reference no warnings are issued, but the app crash.
> Corrected example could be:Well, the problem here is *storing* a reference - not a passing param
>
>
> struct Bar
> {
>
> explicit Bar(shared_ptr<int> const& data)
> : data_(data)
> {}
>
> ~Bar()
> {
> *data_ = 100;
> }
>
>
> private:
> shared_ptr<int> const& data_;
> };
>
>
> //possible misuse
> void foo()
> {
> shared_ptr<int> ptr = shared_ptr<int>(new int(10));
> Bar bar(ptr);
>
> ptr.reset();
>
> } // BOOM!!! => ptr is destroyed before the Bar::~Bar() is called
by (const) reference.