Une contrainte sur laquelle je suis tombé il y a peu de temps. Afin de gérer la mémoire de manière fine, il faut utiliser des allocateurs. Des classes utilisant des allocateurs pour toute la gestion mémoire, a la place de new et delete, permettent de gérer la mémoire de manière fine, et de maitriser l’utilisation mémoire, d’éviter des problèmes de fragmentation mémoire, et d’optimiser les allocations.
Mais pour ce niveau de généricité, il est impossible de passer un argument au constructeur. Il faut séparer l’aspect allocation et l’aspect initialisation. Ça implique des petits changements dans le code, notamment le fait d’avoir une fonction init(…) qui initialise l’objet et le prépare à l’utilisation. Le constructeur quand a lui se limite du coup à une liste d’initialisation qui donne des valeurs par défaut aux membres.
Ça change pas mal de choses au final. Si on rajoute une methode cleanup qui remet la classe dans l’état où elle était après le constructeur, on peut alors réutiliser des classes. Pour les entitiés par exemple, on pourrait imaginer allouer à l’avance les unités, et les init/cleanup en conservant la mémoire. Je trouve ca très jeu console comme façon de voir, une façon d’allouer toutes les ressources disponibles à l’avance, de les répartir, et de s’y tenir après.