Bonjour � tous,
J'ai d�veloppez il y a quelques temps une classe de smart pointer de type :J'ai d�j� eu l'occasion de faire quelques tests, il "semblerait" qu'ils soient fonctionnels. J'ai pu lire que dans mon cas de figure seul les r�f�rences circulaires emp�ch�es les smarts pointers de fonctionner. Or j'ai d�couvert un bug plut�t "�trange" (tout du moins incompris de moi). Voil� le d�tail de ce qui se passe :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 template <class T> class CSmartPointer { T *m_Pointer; int *m_Counter; };Il faut savoir que CNodePtr est donc de type CSmartPointer<CNode> (CNode n'�tant pas important ici). m_Root est initialis� a NULL par d�faut et le compteur � 1. Maitenant dans la fonction ReadScene :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 class CSceneManager{ //... bool ReadScene(std::string const &Filename); bool ReadScene(CNodePtr Root); CNodePtr m_Root; }Une petite explication s'impose, Loader est une instance de classe permettant de charger des sc�nes, la fonction LoadScene renvoie un CNodePtr correspondant � la sc�ne charg�e. Et enfin :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9 bool CSceneManager::ReadScene(std::string const &Filename) { //... // Load the scene : CNodePtr NodeTmp = Loader->LoadScene(Filename); // compteur à 1!! bool b = ReadScene(NodeTmp); // compteur à 2 return b; // compteur à 0 }R�sultat l'objet est d�truit... et je bloc dessus depuis un bon moment d�j� alors que �a � l'air idiot
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 bool CSceneManager::ReadScene(CNodePtr Root) { //... m_Root = Root; //compteur à 3 return true; }(mais bon c'est toujours comme �a)
Si vous avez besoin de plus de code (CSmartPointer, fonctions...) n'h�sitez pas � demander...
Merci d'avance et bonne fin de journ�e
Partager