Reinterpret_Cast et objets trivialement constructibles par défaut
La référence C indique que les objets avec des constructeurs par défaut triviaux peuvent être créés à l'aide de reinterpret_cast sur un stockage correctement aligné . Cependant, cette déclaration a été révisée et se lit désormais différemment.
Compréhension actuelle :
Les objets avec des constructeurs par défaut triviaux ne peuvent pas être créés directement à l'aide de reinterpret_cast sur la mémoire allouée. Au lieu de cela, placement-new doit être utilisé pour initialiser formellement l'objet et éviter un comportement indéfini.
Raisons derrière la révision :
La déclaration originale impliquait l'existence d'un objet sur le stockage alloué, ce qui est incorrect. La création d'un objet nécessite des constructions de langage explicites telles qu'une définition, une nouvelle expression, un changement de membre du syndicat ou la création d'un objet temporaire.
La définition de « objet » en C 1z (intro.object/1) explicitement indique que les objets sont créés par ces mécanismes spécifiques et n'inclut pas reinterpret_cast.
Durée de vie du X Objet :
Étant donné qu'aucun objet X n'est créé, la notion de sa durée de vie ne s'applique pas. Le comportement d'affectation à sa variable membre (x) entraîne un comportement indéfini.
Changements dans C 1z :
C 1z a modifié la définition de "objet" et a précisé que reinterpret_cast seul ne crée pas d'objets. Cela renforce le principe selon lequel les objets doivent être explicitement créés et initialisés via des mécanismes de langage bien définis.
Conclusion :
Bien que reinterpret_cast puisse être utilisé pour accéder à la mémoire des objets non initialisés stockage, il ne peut pas créer directement des objets avec des constructeurs par défaut triviaux. Une initialisation appropriée des objets et une gestion de la durée de vie nécessitent l'utilisation de constructions de langage appropriées telles que des appels de constructeur de nouveau placement ou explicites.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!