J'ai 2 classes qui font référence l'une de l'autre, comme l'exemple ici.
La classe B contient un objet de type A et la classe A contient un pointeur de type B. Je veux initialiser le pointeur de type B de la classe A lors de la création de l'objet B. Je fais donc ainsi:
Et ca m'affiche un warning:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 B::B() : a(this) { }
Ce warning signale que tant que B n'a pas été construit totalement, A ne peut pas faire appel à une fonction de B sous peine de risque de plantage.warning C4355: 'this' : used in base member initializer list
A peut donc appeler une fonction de B qu'en dehors de son constructeur (peut-être que je ne pense pas à un cas de figure et que ça peut planter d'une autre manière).
Ce qui donne:
Cependant le warning me gène même si j'aurais envie de l'écrire de cette manière, faire le lien dès la construction de l'objet. Il vaut mieux faire le lien en 2 temps?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 B b; b.GetA().DoSomething();
Du style:
Dans ce cas là, je ne peux pas mettre comme membre de A une référence de B (ce qui est plus propre à mon goût).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 B b; b.InitA(); b.GetA().DoSomething();
Des commentaires?
Partager