[Dune] allocators... dingleton vs. instance

Carsten Gräser graeser at math.fu-berlin.de
Wed Oct 3 20:44:31 CEST 2012


Hello Christian,
the standard (98) does discuss the issue, however in a very
unsatisfying way:

Section 20.1.5 (Allocator requirements) clause 2 says that two
allocators compare equal if storage allocated by one can be
deallocated by the other. But it does _in general_ not require
that two distinct instances compare equal.

(*) However, clause 4 says that all container classes defined in
the stl are permitted to additionally require that two instances
of the same type always compare equal. Then clause 5 imposes
a very weak restriction to this exception:

    Implementors are encouraged to supply libraries that can accept
    allocators  that  encapsulate  more general memory models and
    that support non-equal  instances. [...]

In C++11 exception (*) was removed.

Conclusion:
Standard conforming allocators are not required to support your
use case. But an allocator that should work with any C++98 stl
implementation must support it. For C++11 the later is no longer
the case and so called 'stateful' allocators may become much more
likely.

Best,
Carsten



In fact
Am 02.10.2012 22:32, schrieb Christian Engwer:
> Dear all,
> 
> I'm currently puzzled... and I couldn't find an answer in the
> standard.
> 
> Assume the following:
> 
> AllocatorType<Foo> alloc1;
> AllocatorType<Foo> alloc2;
> Foo * f = alloc1.allocate(1);
> alloc2.deallocate(f,1);
> 
> Is this supposed to work? In general I would assume not (although it
> will work for many implementations). Is there somewhere a place that
> states that the instance of an allocator is important and not only the
> type?
> 
> Christian




More information about the Dune mailing list