|
Boost : |
From: scleary_at_[hidden]
Date: 2001-05-14 07:45:05
John -
> Unfortunately, the Standard allocator design is seriously
> broken. I wonder if there is any interest in
> a boost version of STL containers (and a version
> of the default allocator) that fixes this problem.
I agree with you that the Allocator requirements need some re-work. As you
point out, the drawback is the inability of the Standard containers to work
with instance-based Allocators.
Your copy<U> fix is not necessary, though; just use the envelope/letter
idiom (i.e., have an ActualAllocator class, and make your Allocator class be
a sort of ref-counted pointer or something to reference the underlying
ActualAllocator).
I don't see how the default constructors for Allocators are causing problems
-- but I don't see that it's really necessary, either (it could be
optional).
> This does mean copying the whole of STL :-)
Yes, and I'm not sure that re-writing the STL is something that a lot of
people here are going to be excited about. I started something similar
based on relaxed copy-construction requirements (so that you could store,
e.g., std::auto_ptr in containers), but re-writing the STL isn't fun. :)
Also, there are problems with requiring all Standard containers to accept
instance-based Allocators, even with empty base optimization -- the
canonical example is "how do you support std::list::splice?"
-Steve
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk