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
//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?