Ce n'est pas impossible d'avoir plusieurs singleton. Ici, il a un singleton pour chaque spécialisation de sa classe template.
Pour le static, c'est nécessaire pour une fonction destroy() qui détruit le singleton
et affecte NULL au pointeur (pour supprimer le singleton avant le fin du programme).
Si le but est de supprimer les singletons à la fin du programme, pas besoin de destroy(). On peut simplement les détruire avec un delete :
Code:
1 2 3 4
| for(map<string, Singleton*>::iterator it = singletons.begin(); it != singletons.end(); ++it)
{
delete it->second();
} |
Je vois pas comment créer une fonction destroy() utilisant dynamic_cast. La classe Singleton n'existe pas mais uniquement les classes Singleton<T>.