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?