Bonjour à tous,
(Il n'y a pas à dire, dans les sous-forums, on lit moins...)
Je reviens à la charge avec un problème sur les shared_ptr<>.
J'ai deux classes, mettons la classe ClasseGenerale et la classe PetiteClasse, définies comme suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
// Dans ClasseGenerale.h
class ClasseGenerale
{
public:
ClasseGenerale();
~ClasseGenerale();
private:
boost::shared_ptr<PetiteClasse> Util;
}
 
// Dans ClasseGenerale.cpp
// ...
ClasseGenerale::ClasseGenerale()
{
// Initialisation de Util.
Util.reset(new PetiteClasse(this)); // !!! Comme ça qu'on fait ?
}
Et la classe PetiteClasse :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Dans PetiteClasse.h
class PetiteClasse
{
public:
PetiteClasse(ClasseGenerale* prochainParent);
~PetiteClasse();
private:
boost::shared_ptr<ClasseGenerale> parent;
}
 
// Dans PetiteClasse.cpp
// ...
PetiteClasse::PetiteClasse(boost::shared_ptr<ClasseGenerale> prochainParent)
{
// Initialisation de parent.
parent = prochainParent;
}
Je voudrais pouvoir faire le double lien classique avec des pointeurs de boost. Le problème c'est que dans la méthode de la classe "plus générale" je ne sais pas comment passer en argument pour que cela fonctionne.
Avec enabled_shared_from_this.hpp je ne comprends pas non plus pourquoi ça ne marcherait pas, si je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Util.reset(new PetiteClasse(boost::shared_ptr<ClasseGenerale>(this)))
Pouvez-vous me dire ce qui ne va pas ?

Merci d'avance !