Cela ne fonctionne que par hasard pour commencer.
Test
est une classe primitive sans héritage impliqué, aucune méthode virtuelle, compilée sans support RTTI, ou toute autre chose qui pourrait gonfler la représentation en mémoire.
Dans cet exemple trivial, la seule variable membre est à la même adresse que l'objet entier. C'est extrêmement dangereux sur lequel s'appuyer, car c'est un comportement indéfini pour quelque chose de plus complexe.
Essayez par ex. maintenant apportant l'héritage et les méthodes virtuelles dans votre test. Soudain, les premiers octets de votre objet ne sont plus la première variable membre (c'est là que le compilateur placera généralement le VPTR), et vous testez les plantages horriblement. Ou faites de votre variable membre une statique à la place, maintenant votre objet lui-même est vide et vous accédez à des structures de contrôle de tas, ce qui ne provoque pas forcément un crash immédiat, mais des corruptions qui sont bien pires. Eh bien, dans ce cas t
a été affecté à la pile, donc vous corrompez seulement votre pile à la place (ce qui est légèrement moins pire), mais si le tas était alloué, cela deviendrait critique.
cela n'a aucun sens: *** int * ptr = (int *) & t; *** –
Rendre 'data' public si vous avez besoin d'accéder à la valeur directement. Vous pouvez créer des méthodes pour votre classe qui accèdent et manipulent 'data'. Vous devriez éviter de manipuler directement les membres d'une classe en dehors de sa propre portée. –