
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 On Thu, Mar 19, 2009 at 5:34 PM, Igor R <boost.lists@gmail.com> wrote:
//possible misuse 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.
In your example, how would the behavior change, if Bar::set would take the pram by value?