|
Boost : |
Subject: Re: [boost] [interest] rich-typed smart pointers
From: Jonathan Wakely (jwakely.boost_at_[hidden])
Date: 2013-10-07 06:45:37
On 7 October 2013 11:01, Julian Gonggrijp wrote:
>
> The std::weak_ptr detects the dangling pointer and changes it into a
> null pointer. This makes sense, because null pointers are easier to
> detect. However, as the surrounding code probably relies on a live
> pointer (because dangling pointers are never planned) the program is
> still going to fail. This is what I meant by "disaster".
Why is it going to fail? Expired pointers (not dangling ones) most
certainly are planned, and weak_ptr is designed to support (and
detect) that case. Users of std::weak_ptr know that it needs to be
checked, and the explicit conversion that is needed makes it hard to
forget to do that. Either you say:
std::shared_ptr<X> sp(wp);
which will throw if weak_ptr.expired() is true, or you use the
non-throwing form in a conditional:
if (auto sp = wp.lock())
/* ... */ ;
else
/* deal with it */ ;
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk