J'ai un cache d'objets hétérogènes, stockés par nom. Notez qu'il n'existe pas de classe de base commune pour ces objets. Au moment de la création, je dois également stocker un objet Deleter (puisque je connais le type à ce moment-là), de sorte que la carte ressemble à ceci :
map<string, pair<void *, Deleter> > data;
chaque fois qu'un objet est récupéré (par une méthode modélisée), il est réinjecté dans le type demandé. Le destructeur du cache appelle simplement le Deleter et supprime la paire de la carte. Tout cela fonctionne.
Il aurait été agréable, cependant, que C++11 me permette de faire quelque chose comme :
map<string, unique_ptr_base> data;
où unique_ptr_base serait une classe de base (imaginaire) de tous les unique_ptr et son destructeur virtuel supprimerait l'élément. Je pourrais alors simplement supprimer l'élément de la carte sans me préoccuper de la désallocation.
L'écriture d'une classe spéciale à cette fin n'est pas trop difficile, mais dans ce cas, elle n'est pas justifiée, puisque la méthode actuelle n'occupe qu'une ligne de plus et qu'il n'y a pas beaucoup de risque de fuite accidentelle du pointeur. Alors, y a-t-il une caractéristique de la nouvelle norme que j'ai oubliée, ou dois-je la laisser telle quelle ?