2 classes qui font référence l'une à l'autre
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:
Code:
1 2 3 4 5
|
B::B() :
a(this)
{
} |
Et ca m'affiche un warning:
Citation:
warning C4355: 'this' : used in base member initializer list
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.
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:
Code:
1 2
| B b;
b.GetA().DoSomething(); |
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?
Du style:
Code:
1 2 3
| B b;
b.InitA();
b.GetA().DoSomething(); |
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).
Des commentaires?