Yes, that's true. This was coded to model what can happen.
Corrected example could be:
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
> //possible misuseIn your example, how would the behavior change, if Bar::set would take
> void foo()
> {
> Bar bar;
> shared_ptr<int> ptr = shared_ptr<int>(new int(10));
>
> bar.set(ptr);
> } // BOOM!!! => ptr is destroyed before the Bar::~Bar() is called
>
>
> If you do not program real time soft, it is probably always better to copy
> sp.
the pram by value?