Entschuldigung, ich kann den spezifischen Code nicht einfügen.
Ich hoffe, diese kleine Probe ist genug:Warum möchte std :: list meinen Zuweiser ohne Argumente aufrufen?
Lassen Sie uns sagen, dass ich ein allocator wie dieses:
template <class T>
class MyAllocator
{
// ... typedefs
MyAllocObject _allocObject;
public:
MyAllocator() {
// _allocObject = new ..
}
MyAllocator(const MyAllocator& alloc) {
_allocObject = alloc.getAllocObject();
}
template <class U>
MyAllocator(const MyAllocator<U>& alloc) {
_allocObject = alloc.getAllocObject();
}
MyAllocator(const MyAllocObject& allocObject) {
_allocObject = allocObject;
}
inline pointer allocate(size_type size) {
return _allocObject->alloc(size);
}
// other functions
};
Und wie diese genutzt werden:
MyAllocObject object;
MyAllocator<int> myAlloc(object);
std::list<int, MyAllocator<int> > list(myAlloc);
ich erfahren, dass, wenn die Standard Konstruktor fehlt, der Code kompiliert nicht, also habe ich ihn hinzugefügt.
Aber das Problem ist, dass ich auf dieses Argument angewiesen bin, weil das ist, was ich für meine benutzerdefinierten Speicherzuweisungen verwende.
Was kann ich in diesem Fall tun?
Bevor C++ 11, mußte Verteilern b wie zwei Instanzen des gleichen Typs, unabhängig davon, wie sie initialisiert wurden, mussten austauschbar sein. (Diese Anforderung stammt aus dem Verschieben von Elementen von einem Container zu einem anderen) C++ 11 fügt Anforderung für Stateful Allokatoren hinzu. Vor C++ 11 mußten sich die Zuweisungseinrichtungen als wenn statlos verhalten, d. H. Zwei Instanzen des gleichen Typs, egal wie sie initialisiert wurden, mußten austauschbar sein. C++ 11 fügt Anforderung für Stateful Allokatoren hinzu: http://stackoverflow.com/questions/6861046/compiler-support-for-stateful-allocators-in-stl-containers – peterchen
Mit welcher Plattform, mit welchem Compiler und mit welchen Optionen arbeiten Sie? – Niall
@Niall: Ich wollte ein bisschen vor dem Posten als Antwort erweitern. Fertig :) - Leider konnte ich kein nettes Intro finden, um Stateful Allokatoren zu verwenden. – peterchen