La valeur du this
pointeur est-elle garantie constante pendant la durée de vie d'un objet particulier? Je ne peux pas imaginer un cas où cela changerait, mais je ne sais pas si je ne manque pas quelque chose.
c++
this
language-lawyer
object-lifetime
Daniel Langr
la source
la source
this
pointeur est toujours la valeur de l'adresse de l'objet sur lequel la fonction a été appelée. La question est donc équivalente à «un objet peut-il changer son adresse mémoire au cours de sa durée de vie?std::move
changerait dethis
pointeur. Formellement, nous dirions que ce sont deux objets différents, mais de manière informelle, on peut les considérer comme «les mêmes», ce qui pourrait engendrer la confusion si l'on n'y prête pas attention.Réponses:
Oui .
Comme le dit l'utilisateur Aconcagua : la valeur du
this
pointeur est toujours la valeur de l'adresse de l'objet sur lequel la fonction a été appelée 1 . La question est donc équivalente à:Ce n'est pas possible, par définition de
lifetime
2 . La durée de vie d'un objet commence lorsque ou après son stockage est obtenu et se termine avant le moment où il est libéré.1)
[class.this]/1
2)
[basic.life]/1
(c'est moi qui souligne)la source
this
chaque fois, quels que soient les mouvements du tas?Un objet a une région de stockage.
this
pointe là.la source
La valeur de
this
est garantie constante si le programme la lit jamais, si par la suite certains bits de la valeur lue sont impossibles à récupérer ou si par la suite certains bits de la valeur lue se sont échappés en dehors du programme. Dans tous les autres cas, il se comporte comme un chat de Schrödinger, c'est-à-dire qu'il est constant et variable à la fois.la source
this