$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Peter Dimov (pdimov_at_[hidden])
Date: 2003-12-18 12:27:55
Rani Sharoni wrote:
>
> It still bothers me that it's easy to write code like the following:
> ~A::A()
> {
> shared_ptr<T> p(weak_ptr_);
> p->cleanup();
> }
It's even easier to write
~A::A()
{
p->cleanup();
}
in cases where the correct form would have been
~A::A()
{
if(p) p->cleanup();
}
The situation above is similar, it should have been
~A::A()
{
if( shared_ptr<T> p = weak_ptr_.lock() )
{
p->cleanup();
}
}
The original code is broken, no matter whether the constructor throws an
exception on expired() or not. I'm not sure whether the revised form isn't
broken too, from a design point of view, but let's put that aside. ;-)