Oui. Un allocator
est un moyen de factoriser l'allocation de mémoire à partir de l'utilisation de la mémoire. Si un conteneur a besoin de mémoire, au lieu de:
// too rigid, cannot allow custom allocation schemes
void* mem = ::operator new(someAmount);
Vous obtenez:
// flexible, allows custom allocation schemes
void* mem = myallocator.allocate(someAmount);
Il y a un allocateur standard, std::allocator
, qui utilise operator new
globale et operator delete
.
Vous souhaitez utiliser votre propre allocateur à chaque fois que vous avez besoin de l'affecter de manière spéciale. Ces cas peuvent être: obtenir de la mémoire à partir de certaines listes, allouer à partir de la pile, etc. (Généralement à des fins d'optimisation, mais vous pouvez également enregistrer des statistiques avec un allocateur personnalisé) La plupart du temps, l'allocateur standard fonctionne parfaitement.