É this
garantido que o valor do ponteiro seja constante durante a vida útil de um objeto específico?
Sim .
Como o usuário Aconcagua coloca: o valor do this
ponteiro sempre é o valor do endereço do objeto no qual a função foi chamada 1 . Portanto, a pergunta é equivalente a:
Um objeto pode alterar seu endereço de memória ao longo da vida útil?
Isso não é possível, por definição de lifetime
2 . A vida útil de um objeto começa quando ou após seu armazenamento ser obtido e termina antes de quando ele é liberado.
1) [class.this]/1
No corpo de um não-estático ( [class.mfct]
função de membro), a palavra-chave this
é uma prvalue cujo valor é um apontador para o objecto para o qual a função é chamada.
2) [basic.life]/1
(ênfase minha)
A vida útil de um objeto ou referência é uma propriedade de tempo de execução do objeto ou referência. Diz-se que uma variável possui inicialização vazia se for inicializada por padrão e, se for do tipo de classe ou de uma matriz (possivelmente multidimensional), esse tipo de classe possui um construtor padrão trivial.
A vida útil de um objeto do tipo T
começa quando :
- é obtido um armazenamento com o alinhamento e tamanho adequados para o tipo
T
e
- sua inicialização (se houver) estiver concluída (incluindo inicialização vazia) (
[dcl.init]
), exceto que se o objeto for um membro da união ou um subobjeto do mesmo, sua vida útil somente começará se esse membro da união for o membro inicializado na união ( [dcl.init.aggr]
, [class.base.init]
) ou como descrito em [class.union]
.
A vida útil de um objeto o
do tipo T
termina quando :
- se
T
for um tipo que não seja de classe, o objeto será destruído ou
- se
T
for um tipo de classe, a chamada destruidora será iniciada ou
- o armazenamento que o objeto ocupa é liberado ou é reutilizado por um objeto que não está aninhado em
o
( [intro.object]
).
this
ponteiro sempre é o valor do endereço do objeto no qual a função foi chamada. Portanto, a pergunta é equivalente a 'um objeto pode mudar seu endereço de memória ao longo da vida?'