$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Glen Fernandes (glen.fernandes_at_[hidden])
Date: 2020-01-29 05:39:01
I wrote:
>
> On Wed, Jan 29, 2020 at 12:27 AM Gavin Lambert via Boost wrote:
>
> > https://www.boost.org/doc/libs/1_72_0/libs/smart_ptr/doc/html/smart_ptr.html#allocate_unique
> >
> > claims that it returns a std::unique_ptr<T[], D>.
>
> Correct.
>
> A std::unique_ptr<T[], D> stores a D::pointer.
>
> In our case, D is alloc_deleter<T[], A> and its ::pointer is an
> alloc_ptr<T[], Allocator>.
>
> This alloc_ptr<T[], Allocator> stores an A::pointer and a size_t.
>
> > This seems incompatible with what you're saying above.
>
> It isn't.
>
> > (There is also no mention of ptr() or size() there.)
>
> It specifies that the ::pointer is an 'unspecified' pointer-like type.
> I forgot to document that on this unspecified pointer type one can use
> .ptr() to get the Allocator::pointer and .size() to get the size.
>
Basically, a unique_ptr result from an allocate_unique<T[]>(a, n)
_has_ to store the n somewhere in the unique_ptr because it needs to
know how many objects to destroy and what size storage to deallocate.
I also provide access for you to get that n. (I just forgot to put it
in the documentation).
Glen