SmartPointer non fonctionnel
Bonjour � tous,
J'ai d�veloppez il y a quelques temps une classe de smart pointer de type :
Code:
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:
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:
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:
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:aie: (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