Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2001-10-18 10:27:43


From: "Darin Adler" <darin_at_[hidden]>
> on 10/18/01 5:15 AM, Peter Dimov at pdimov_at_[hidden] wrote:
>
> > void reset(T * p = 0)
> > {
> > shared_ptr(p).swap(*this);
> > }
>
> [Lets try that again without the bugs.]
>
> Wow. That is definitely the right solution:
>
> template<typename Y>
> shared_ptr& operator=(const shared_ptr<Y>& r) {
> shared_ptr copy(r);
> swap(copy);
> return *this;
> }
>
> template<typename Y>
> shared_ptr& operator=(std::auto_ptr<Y>& r)
> { reset(r.release()); }
>
> void reset(T* p=0) { shared_ptr(p).swap(*this); }

I'd simply make all assignments follow the same pattern:

shared_ptr & operator= (T & t)
{
    shared_ptr(t).swap(*this);
    return *this;
}

This is the easiest way to avoid exception safety bugs. :-)

--
Peter Dimov
Multi Media Ltd.

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk