Objets temporaires
dans certains cas, il est que le compilateur crée des objets temporaires.ces objets temporaires peuvent être créés pour les raisons suivantes :
Pour initialiser une référence d' const avec un initialiseur d'un type différent de celui du type sous-jacent de la référence initialisée.
Pour stocker la valeur de retour d'une fonction qui retourne un type défini par l'utilisateur.Ces temporaries sont créés que si votre programme ne copie pas la valeur de retour à un objet.Par exemple :
UDT Func1(); // Declare a function that returns a user-defined // type. ... Func1(); // Call Func1, but discard return value. // A temporary object is created to store the return // value.
Étant donné que la valeur de retour n'est pas copié dans un autre objet, un objet temporaire est créé.Plus de cas le plus fréquent où les temporaries sont créés pendant l'évaluation d'une expression où les fonctions surchargées d'opérateur doivent être appelées.Ceux-ci les fonctions surchargées d'opérateur retournent un type défini par l'utilisateur qui souvent n'est pas copié dans un autre objet.
considérez l'expression ComplexResult = Complex1 + Complex2 + Complex3.L'expression Complex1 + Complex2 est évaluée, et le résultat est stocké dans un objet temporaire.Suivante, l'expression temporaire + Complex3 est évaluée, et le résultat est copié dans ComplexResult (en supposant que l'opérateur d'assignation n'est pas surchargé).
Pour stocker le résultat d'un cast de type vers un type défini par l'utilisateur.Lorsqu'un objet d'un type donné est explicitement converti en un type défini par l'utilisateur, ce nouvel objet est construit comme un objet temporaire.
Les objets temporaires ont une durée de vie qui est définie par leur point de conception et le point auquel ils sont détruits.Toute expression qui crée plusieurs objet temporaire par la suite les détruit dans l'ordre inverse dans lequel ils ont été créés.Les points auxquels la destruction se produit sont présentés dans le tableau suivant.
Points de destruction pour les objets temporaires
Temporaire de raison créé |
point de destruction |
---|---|
résultat d'évaluation de l'expression |
Tous les temporaries créés à la suite de l'évaluation d'une expression sont détruits à la fin de l'instruction d'expression (autrement dit, le point-virgule), ou à la fin de les expressions contrôlantes pour for, if, while, do, et les instructions d' switch . |
initialiser des références d' const |
Si un initialiseur n'est pas une l-value du même type que la référence initialisée, un temporaire du type d'objet sous-jacent est créé et initialisé avec l'expression d'initialisation.cet objet temporaire est détruit juste après que l'objet de référence auquel il est lié est détruit. |