Bonjour � tous,

J'ai d�veloppez il y a quelques temps une classe de smart pointer de type :
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;
};
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
class CSceneManager{
     //...
     bool ReadScene(std::string const &Filename);
     bool ReadScene(CNodePtr Root);
     CNodePtr m_Root;
}
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
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
}
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
bool CSceneManager::ReadScene(CNodePtr Root)
{
     //...
     m_Root = Root;   //compteur à 3
     return true;
}
R�sultat l'objet est d�truit... et je bloc dessus depuis un bon moment d�j� alors que �a � l'air idiot (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