$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [Boost-users] shared_ptr as reference argument
From: Ovanes Markarian (om_boost_at_[hidden])
Date: 2009-03-19 12:48:13
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_at_[hidden]> 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?
>
>