From: Gavin Lambert (boost_at_[hidden])
Date: 2020-01-29 05:55:22
On 29/01/2020 18:39, Glen Fernandes wrote:
>> 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).
Does it also implicitly decay to a T*?
(I did have a look at
but I don't see any `operator T*`, which is what I'd expect.)
If not, that seems like it'd make it hard to pass to something expecting
a raw pointer (eg. as method argument, or to construct a std::span).
Or unless you know about the extra undocumented .ptr() indirection
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk