Boost logo

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