This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [GSoC] __enable_shared_from_this_helper


Follow up questions:

> > According to my knowledge, __enable_shared_from_this construct a
> > weak_ptr in order to safely instantiate a new shared_ptr use only this
> > pointer. So, does __enable_shared_from_this_helper has no effect until
> > user trying to do something like this?
> >
> >> class Test : public ___enable_shared_from_this { };
> >>
> >> shared_ptr<Test> (new Test());
>
> Correct.
> It ensures that when an object is owned by a shared_ptr, the weak_ptr
> member shares ownership with that shared_ptr.

However,

ctor of __shared_count only pass the same type of pointer into

> __enable_shared_from_this_helper(_M_refcount, __p, __p);


but __enable_shared_from_this_helper take two different types of ptr.

> (__shared_count&, __enable_shared_from_this* ptr1, _Tp1* ptr2)

Can you give any specific example of using this feature ?

2.
int* a = new int(1);
shared_ptr<int> a1(a);
shared_ptr<int> a2(a);

When user are trying to do some thing like this, should it throw? I've
tested on the original
std::shared_ptr in gcc 4.9.2, it will not throw on type like <int> but
it do throw on array types.
However, my currently implementation will throw "double deletion" at runtime.

<http://stackoverflow.com/questions/10338606/multiple-shared-ptr-storing-same-pointer>

3. Also, we might also need a specialization for
enable_shared_from_this in order to use
shared_from_this() with std::experimental::shared_ptr;

2015-05-01 18:14 GMT-04:00 Tim Shen <timshen@google.com>:
> On Fri, May 1, 2015 at 10:02 AM, Fan You <youfan.noey@gmail.com> wrote:
>> This is can be combined with the first approach right? by merging
>> _Sp_counted_ptr with _Sp_shared_deleter into _Sp_shared_array.
>
> Why it's related to the first approach? First one doesn't even change
> __shared_ptr, if you like;
>
> Second one changes __shared_ptr, __shared_count, and creates a new
> derived class of _Sp_counted_base.
>
>
> --
> Regards,
> Tim Shen


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]