thisГарантируется ли значение указателя постоянным в течение жизни определенного объекта?
Да .
Как говорит пользователь Aconcagua : значение thisуказателя всегда является значением адреса объекта, для которого функция была вызвана 1 . Таким образом, вопрос эквивалентен с:
Может ли объект изменить адрес своей памяти в течение жизни?
Это невозможно по определению lifetime2 . Время жизни объекта начинается, когда или после его хранения получено и заканчивается до того, когда он выпущен.
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указателя всегда является значением адреса объекта, для которого была вызвана функция. Таким образом, вопрос эквивалентен «может ли объект изменить адрес своей памяти в течение жизни?»