Igor,
please take a look at my first post. I wrote there: if you can ensure that
the reference is not saved. This is an essential pitfall. If you pass a
value and bind it to a reference a good compiler will warn you that you are
binding a reference to a temporary object. If you pass the reference no
warnings are issued, but the app crash.
On Thu, Mar 19, 2009 at 6:13 PM, Igor R
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
Well, the problem here is *storing* a reference - not a passing param by (const) reference.