Bon, je m'explique ;
suite à une implémentation de Garbage Collector enfin bref passons ; je viens de m'apercevoir que l'ordre de déclaration de l'implémentation d'interfaces dans une classe à une importance (chose que je n'ai jamais vue en C# et en Java).
Je m'explique, voilà mon exemple de code :
En voici l'utilisation :
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32 interface I1 { public : virtual void SetI1 () = 0; }; interface IInutil { public : virtual void SetIInutil () = 0; }; class JeCollectionneCeQuiDerivedeI1 { public : void AddElement (I1* param) { CString coincoin("coin coin"); } }; class MaClasseQuiHeriteDesDeuxInterface : public I1, public IInutil { public : MaClasseQuiHeriteDesDeuxInterface (JeCollectionneCeQuiDerivedeI1& jccqdi) { jccqdi.AddElement(this); }; void SetI1 () {}; void SetIInutil () {}; };
Tout se passe impec quand je passe dans le constructeur de la variable mcqhddi, le this passé en paramètre de void AddElement (I1* param) a la même adresse que this c'est-à-dire adresse de this = adresse de param.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 JeCollectionneCeQuiDerivedeI1 jccqddi; MaClasseQuiHeriteDesDeuxInterface* mcqhddi = new MaClasseQuiHeriteDesDeuxInterface(jccqddi);
Par contre, si j'inverse l'ordre d'implémentation des interfaces dans ma classe :
alors là dans le constructeur, je me retrouve avec un pointeur this qui est de 4 bits inférieur à la valeur de param. "Olé, c'est super !!!". Donc il doit y avoir un problème de vtbl, mon tableau de pointeur de fonctions virtuelles sur ma classe dépend de l'ordre de déclaration d'implémentation de mes interfaces dans cette classe. Ce qui me paraît plus que bizarre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ... class MaClasseQuiHeriteDesDeuxInterface : public IInutil, public I1 ...
Je viens de me repencher sur le bouquin "Mieux développer avec C++" et sur le bouquin de Stroujstrup (excusez pour l'orthographe), rien pas d'indice.
Donc si vous pouviez m'éclairer et me dire si vous aviez déjà eu ce cas-là.
Ou bien alors quelque-chose m'échappe et merci de bien vouloir m'éclairer ou alors ... tant pis
Partager