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 :


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 avant la déclaration de A, sizeof(A) == 4;
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;
}