Citation:
Envoy� par
JolyLoic
Ah, enfin un truc un peu louche dans ton code ;)
Je ne suis pas certain que ce soit li�, mais pourquoi ne pas avoir simplement un namespace global cr�� dynamiquement comme les autres, et dans ta classe program, une seul variable membre, de type std::shared_ptr<namespace_> ?
Parc'queeeee ! C'est pas optimis� comme �a ! Et �a n'a rien d'une optimisation pr�matur�e. On est pas en java :roll:.
Bien, plus s�rieusement, je teste �a imm�diatement.
(�)
H�las cela ne change rien. De plus, que le namespace global soit cr�� dynamiquement ou statiquement, si j'utilise le syst�me que j'ai mis en place le temps de r�gler ce probl�me, tout fonctionne bien :
Le propri�taire de chaque namespace passe au namespace une copie d'un shared_ptr vers lui-m�me (le namespace), voir namespace_::shared_this() et m_shared_this.
Ainsi, lors de l'ex�cution de namespace_::add(), o� le namespace doit passer un pointeur vers lui-m�me � son enfant (le namespace_item, ou dans mon code le namespace_ tout court, car je vais surcharger add() pour chaque type d'item), le namespace n'a plus qu'� passer m_shared_this � son enfant (le fameux shared_ptr persistant dont j'ai parl� dans mon premier post) en lieu et place o� j'aimerais plut�t �crire shared_from_this().
�a renforce l'hypoth�se que le probl�me vient de shared_from_this(). Si je laisse shared_from_this(), j'ai immanquablement droit � une exception de type bad_weak_ptr.
Citation:
Envoy� par
JolyLoic
Autre point, sans rapport avec ton probl�me, pourquoi ne pas faire retourner � namespace_item::parent() un shared_ptr, tout en gardant un weak_ptr comme donn�e membre ? Ca simplifierait probablement l'utilisation de cette fonction.
Il me semblait qu'un shared_ptr g�n�r� � partir d'un weak_ptr devait rester le plus temporaire possible. D'autant plus que la fonction pour obtenir ce shared_ptr s'appelle weak_ptr::lock(). �a sonne un peu mutex, �a me donne pas envie de cr�er un shared_ptr persistant � partir de �a !