this
Гарантируется ли значение указателя постоянным в течение жизни определенного объекта?
Да .
Как говорит пользователь Aconcagua : значение this
указателя всегда является значением адреса объекта, для которого функция была вызвана 1 . Таким образом, вопрос эквивалентен с:
Может ли объект изменить адрес своей памяти в течение жизни?
Это невозможно по определению lifetime
2 . Время жизни объекта начинается, когда или после его хранения получено и заканчивается до того, когда он выпущен.
1) [class.this]/1
В теле функции- [class.mfct]
члена non-static ( ) ключевое слово this
является prvalue , значением которого является указатель на объект, для которого вызывается функция.
2) [basic.life]/1
(акцент мой)
Время жизни объекта или ссылки является свойством среды выполнения объекта или ссылки. Говорят, что переменная имеет пустую инициализацию, если она инициализирована по умолчанию, и, если она имеет тип класса или (возможно, многомерный) массив, этот тип класса имеет тривиальный конструктор по умолчанию.
Время жизни объекта типа T
начинается, когда :
- хранения с правильным выравниванием и размером для типа
T
получаются , и
- его инициализация (если есть) завершена (включая пустую инициализацию) (
[dcl.init]
), за исключением того, что если объект является членом объединения или его подобъектом, его время жизни начинается только в том случае, если этот член объединения является инициализированным членом в объединении ( [dcl.init.aggr]
, [class.base.init]
) или как описано в [class.union]
.
Время жизни объекта o
типа T
заканчивается, когда :
- если
T
тип не является классом, объект уничтожается, или
- Если
T
это тип класса, начинается вызов деструктора, или
- хранилище, которое занимает объект, освобождается или используется объектом, который не вложен в
o
( [intro.object]
).
this
указателя всегда является значением адреса объекта, для которого была вызвана функция. Таким образом, вопрос эквивалентен «может ли объект изменить адрес своей памяти в течение жизни?»