Bonjour,
dans un code je me retrouve avec une structure qui n'as pas la même taille suivant le .cpp.
C'est lié à la prédéclaration et un pointeur de fonction membre sur cette class :
Du coup si je met la déclaration de maClass avant la déclaration de A, sizeof(A) == 4;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class maClass; struct A { void (maClass::* pFunc)(); };
Du coup si je met la déclaration de maClass aprés la déclaration de A, sizeof(A) == 16;
Je suppose que c'est l'interprétation du compilateur qui est différente :
* si maClass est connue : c'est un pointeur sur une fonction membres
* si maClass n’est pas encore connue : c'est un pointeur de fonction.
et sous MSVC ces deux types de pointeur n'ont pas la même taille.
Mais es ce bien cela??
Voici un petit code de test. Il suffit de modifier la valeur du #if pour passer d'un cas à l'autre.
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
33
34
35 #include <iostream> class maClass; #if 0 struct A { void (maClass::* pFunc)(); }; #else struct maClass { int a; int b; }; struct A { void (maClass::* pFunc)(); }; #endif int main(int argc, char* argv[]) { int sa = sizeof(A); std::cout << sa << std::endl; return 0; }
Partager