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