Oh yes, yes yes !! I do a lot !
Bref, bonjour, laissons de coter mon anglais aproximatif pour aujourd'hui 
Ce qui m'am�ne ici ets le Singleton, l'un des design pattern les plus utils� � ce que j'ai compris . Et j'aimerai bien le comprendre !
J'ai lu pas mal d'article sur son r�le, son histoire, son impl�mentation etc ... Et je vais me baser sur la version de Loulou ( http://loulou.developpez.com/tutorie...eur3d/partie1/ ), qui � peu de choses pr�s est l'une des formes les plus r�pandu d'impl�mention de Singleton .
< A partir de la, je vais raconter des choses ( sur ce que je crois avoir compris ) et poser des questions, vous pouvez ( devez?) me reprend sur chaque faute commise ( je tiens vraiment � comprendre tout les pincipes sous-jacents correctement ) >
Bref, le principe : on veux une classe m�re de laquelle vont d�river nos classes bas�e sur le mod�le singleton . On part sur un principe d'h�ritage car il parrait fastidieux de r�impl�menter pour chauqe classe le m�me mod�le.
Ensuite on templatise notre classe, puisqu'elle doit pouvoir cr�er et contenir un objet de type variable ( celui des classes d�riv�e de notre singleton ) .
La ou j'ai du mal c'est a la d�claration de ntore variable T, celle contenu dans le singleton ( celle du type de la classe d�riv�e, vous me suivez ? )
static T* Inst; // Instance de la classe
J'ai lu que le pointeur �tait la pour permettre de d�riv� des classes, qu'est ce qui empecherais la d�rivation avec une instance local et non un pointeur ?
[ c'est surement tout con comme r�ponse ]
Ensuite, j'ai du mal avec le "static", car en fait on ne cr� de toute facons jamais une instance de la classe nous meme , je me trompe ?
On se r�sume a des CMonManager::GetInstance().mafonction(), donc on instancie jamais l'objet nous meme, donc la variable n'a pas besoin detre static , si ?
Passons, j'ai lu ceci
A static variable inside a function is registered by at_exit(), and is deallocated when main exits. We have no control over when it gets called or when the destructors of global objects call the singleon - it may be already deallocated!
Ca pose probl�me ca non ? Comment r�soudre ca?
De plus, la dur�e de vie de l'objet est lourde a g�r� non ? Il faut penser � faire le delete, sinon c'est pas gagn� .... quelles sont les solutions � cela ? [ enfin si ca pose probl�me et que je ne suis pas � cot� de la plaque hihi ]
Pour finir, voici la syntaxe de la d�claration de notre varaible statique, et j'ai du mal a la comprendre :
template <class T> T* CSingleton<T>::Inst = NULL;
J'aurais mis ca moi
T* CSingleton<T>::Inst = NULL;
ou ca plutot
T* template <class T> CSingleton<T>::Inst = NULL;
Quel est le pourquoi du comment ?
Je pense en avoir finit avec mon flot de question, merci d'avance !
Partager