Allocator Part of Type
jmh530
john.michael.hall at gmail.com
Thu Mar 15 22:30:42 UTC 2018
On Thursday, 15 March 2018 at 21:43:41 UTC, Steven Schveighoffer
wrote:
> [snip]
> I don't know if I've heard Andrei talk about that, but I
> definitely have made it part of the type for types that need to
> allocate. The only other possibility is to accept and use an
> Allocator object (i.e. the interface).
>
> I suppose the main reason you may want to not make it part of
> the type is if you want to compare/assign two types built with
> different allocators. But then I don't know why you would want
> to do that.
>
> But I just thought of this too -- maybe he said you should make
> it a part of the struct itself? That is, you shouldn't make the
> allocator a member, but the allocator itself can be part of the
> type?
>
> Not sure.
>
> -Steve
I first remember him saying it with respect to C++'s allocators
[1]. The C++ containers in std include the allocator as part of
the type. I don't really recall what the reasoning was. I also
recall him saying it with respect to automem [2].
Automem includes the allocator among the template variables and
then puts the allocator in an enum (Atila says it only takes up
space in certain situations). I think the containers library does
something similar, but with an alias if state size is 0 and as a
member otherwise.
[1]
https://github.com/CppCon/CppCon2015/blob/master/Presentations/allocator%20Is%20to%20Allocation%20what%20vector%20Is%20to%20Vexation/allocator%20Is%20to%20Allocation%20what%20vector%20Is%20to%20Vexation%20-%20Andrei%20Alexandrescu%20-%20CppCon%202015.pdf
[2] https://forum.dlang.org/post/ocden9$11s6$1@digitalmars.com
More information about the Digitalmars-d-learn
mailing list