Gregory Colvin <[EMAIL PROTECTED]> writes:

>>> But indeed allocate/construct/deallocate/destroy is more work than
>>                       ^^^^^^^^^            ^^^^^^^
>> Oyeah.  These two absolutely don't belong in allocator, period.  Do
>> any implementations even use them?  Allocators exist to provide a
>> point of customization for users, but you cannot/should not customize
>> these.
>
> Conforming containers had better use them.  

I'm sorry, but I think that's flat wrong.  What do you suppose that
entry in column 2 of the allocator requirements table (20.1.5) means,
after all?

> And once you are down in the coal mine customizing what a pointer
> is, I'm not sure you won't need to customize how to construct and
> destroy.  

The class getting constructed/destroyed has full control over that or
the language is utterly bustificated.

>> Using allocator is even more work than allocating raw memory with
>> malloc and doing placement new and explicit destruction, then freeing
>> the raw memory.  That's my biggest complaint.
>
> It's new/delete
>
>    T* p = new T();
>    ...
>    delete p;
>
> versus malloc/free
>
>    T* p = (T*)malloc(sizeof T);

When you need

     malloc(sizeof(T) + N)

Allocators get a lot harder to use.

>    new(p) T();
>    ...
>    p->~T();
>    free(p);
>
> versus Boost UserAllocator
>
>    T* p = (T*)user_allocator::malloc(sizeof T);
>    new(p) T();
>    ...
>    p->~T();
>    user_allocator::free(p);
>
> versus standard Allocator
>
>    Allocator::pointer p = allocator.allocate(sizeof T);
>    allocator.construct(p,T());
>    ...
>    allocator.destroy(p);
>    allocator.deallocate(sizeof T);
                          ^^^^^^^^

Oops! There's a pointer missing here.  Just a small example of why I'm
saying it's a harder interface.  Allocator has strange requirements,
like "p shall not be null".  If I need to build a custom one I have to
navigate rebind and the implications of allocator inequality for which
the standard provides little guidance.

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to