Boost logo

Boost :

Subject: Re: [boost] [smart_ptr] Interest in the missing smart pointer (that can target the stack)
From: Emil Dotchevski (emildotchevski_at_[hidden])
Date: 2016-01-29 16:27:01


On Fri, Jan 29, 2016 at 11:24 AM, Rob Stewart <rob.stewart_at_[hidden]>
wrote:

> I understand that full well. The example that Emil presented can easily
> lead to having shared_ptrs that refer to release stack memory.
>

My original example was:

{
     foo local;
     shared_ptr<foo> pl(&local,null_deleter());
     ....
     do_something(p);
     ....
     assert(pl.unique());
}

What if I change it to:

int main()
{
     foo local;
     shared_ptr<foo> pl(&local,null_deleter());
     ....
     do_something(p);
     ....
     assert(pl.unique());
}

Does it look less scary now?

It seems that you guys look at this as "why would do_something take a
shared_ptr if it can't keep a copy of it". Being able to retain a copy of
the shared_ptr is one reason, yes. The other reason is that do_something
needs to make sure that the object doesn't expire before it returns, which
in this case it doesn't.

Further, what if do_something is declared as:

void do_something( weak_ptr<foo> const & );

Now it's not that it'll keep shared_ptr references after it returns, but
it'll be creating and destroying shared_ptrs as needed, to make sure that
the object doesn't expire while it's being used. Which, again, in this case
it doesn't.

Emil


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