Envoy� par
Emmanuel Deloget
Pour ma part, et je sais que je vais en surprendre plus d'un, je ne vois pas d'int�r�t � vouloir absolument que le singleton soit d�truit � un moment quelconque du programme (y compris une fois que main() a fini de s'ex�cuter). Nous sommes dans un monde simplifi�, ou l'OS prends en charge l'unload do process et termine toutes les ressources allou�es par ce process. De fait, la m�moire, les fichiers ouverts, etc sont correctement lib�r�/ferm�/etc � la fin du programme.
Certes, on peut toujours me r�pondre "�a fait un resource leak ! ". Et bien non: puisque le singleton est cens� �tre valide � partir du moment ou il est instanci� et jusqu'� la fin du programme (c'est � dire, dans un sens, jusqu'� ce que le dernier destructeur de la derni�re instance qui a une dur�e de vie statique ait fini de s'ex�cuter), quel leak est-ce que je cr�e si je ne le lib�re pas en quittant ? Aucun, puisque sit�t apr�s l'ex�cution du destructeur du singleton, on est cens� redonner la main � l'OS pour qu'il fasse le clean up.
En fait, si on donne � l'utilisateur la possibilit� de d�truire le singleton quand il le souhaite, on prends le risque de l'autoriser � l'utiliser apr�s qu'il ait �t� d�truit - ce qui est bien plus ennuyeux que de ne pas le d�truire au niveau de la maintenance du code.
J'en entends d�j� qui me hurlent "mais un utilisateur lambda ne ferais pas �a!". Certes. C'est possible. Le m�me utilisateur lambda ne d�clarera pas deux instances de la m�me classe si vous lui dites qu'il n'en a pas le droit. Puisque vous vous substituez � son intelligence en interdisant la cr�ation d'une seconde instance de votre classe, pourquoi lui permettre de la d�truire apr�s ? Ca n'est pas tr�s consistant :)