Гарантируется ли значение указателя this
постоянным в течение жизни определенного объекта?
Да .
Как пользователь Aconcagua выражает это: значение this
указатель всегда является значением адреса объекта, для которого была вызвана функция 1 . Таким образом, вопрос эквивалентен:
Может ли объект изменять адрес своей памяти в течение времени жизни?
Это невозможно по определению lifetime
2 . Время жизни объекта начинается, когда или после того, как его хранение получено, и заканчивается до того момента, когда он выпущен.
1) [class.this]/1
В теле функции-члена non-stati c ([class.mfct]
) ключевое слово 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]
).