É this
garantido que o valor do ponteiro seja constante durante a vida útil de um objeto específico? Não consigo imaginar um caso em que isso mudaria, mas não sei se não estou perdendo alguma coisa.
c++
this
language-lawyer
object-lifetime
Daniel Langr
fonte
fonte
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?'std::move
mudaria dethis
ponteiro. Formalmente, diríamos que esses são dois objetos diferentes, mas, informalmente, podemos pensar neles como "o mesmo", o que pode gerar confusão se não estiver prestando atenção.Respostas:
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: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
2)
[basic.life]/1
(ênfase minha)fonte
this
todas as vezes, independentemente dos movimentos na pilha?Um objeto tem uma região de armazenamento.
this
aponta lá.fonte
this
É garantido que o valor de seja constante se o programa o ler, se subsequentemente alguns bits do valor de leitura forem impossíveis de coletar no lixo ou se subsequentemente alguns bits do valor de leitura tiverem escapado para fora do programa. Em todos os outros casos, ele se comporta como o gato de Schrödinger, ou seja, é constante e variável ao mesmo tempo.fonte
this