2013-05-29 1 views
3

Peut-on utiliser #pragma pack() avant une classe?Utilisation de #pragma pack sur une classe

Quelle est la signification de pragma ici? Je sais qu'il est utilisé pour donner des informations au compilateur concernant la mise en œuvre, mais que se passe-t-il si nous l'utilisons avec une classe?

Répondre

6

Il a le exact même effet sur une classe comme il le fait sur une structure, affectant l'alignement des membres de données.

En fait, l'utiliser sur une classe est très inhabituel et presque toujours une erreur. La disposition d'un objet de classe C++ est fortement définie par l'implémentation. Un compilateur C++ s'efforce généralement d'optimiser cette mise en page, en supprimant le pointeur de la table v lorsqu'il le peut. Et potentiellement en ajouter un lorsque la classe utilise l'héritage multiple. Ainsi, une modification mineure de la déclaration de classe, comme la création d'une méthode virtuelle ou l'ajout d'une classe de base peut modifier considérablement la disposition de l'objet. Cela va bien sûr casser le code qui dépend de ce pragma. Comme un objet sérialisé à un fichier binaire ne sera plus désérialisé correctement. En général une mauvaise pratique aussi mais arrive tout le temps quand même. Ne l'utilisez pas.

Questions connexes