this
Гарантируется ли значение указателя постоянным в течение жизни определенного объекта? Я не могу представить себе случай, когда это изменится, но не знаю, не пропустил ли я что-то.
c++
this
language-lawyer
object-lifetime
Даниэль Лангр
источник
источник
this
указателя всегда является значением адреса объекта, для которого была вызвана функция. Таким образом, вопрос эквивалентен «может ли объект изменить адрес своей памяти в течение жизни?»std::move
, изменитthis
указатели. Формально мы бы сказали, что это два разных объекта, но неофициально можно думать о них как о «одинаковых», что может породить путаницу, если не обращать внимания.Ответы:
Да .
Как говорит пользователь Aconcagua : значение
this
указателя всегда является значением адреса объекта, для которого функция была вызвана 1 . Таким образом, вопрос эквивалентен с:Это невозможно по определению
lifetime
2 . Время жизни объекта начинается, когда или после его хранения получено и заканчивается до того, когда он выпущен.1)
[class.this]/1
2)
[basic.life]/1
(акцент мой)источник
this
каждый раз, независимо от движений в куче?У объекта есть область хранения.
this
указывает там.источник
Значение
this
гарантированно будет постоянным, если программа когда-либо его считывает, если впоследствии некоторые биты значения чтения невозможно собрать мусором или если впоследствии некоторые биты значения чтения вышли за пределы программы. Во всех остальных случаях он ведет себя как кот Шредингера, то есть он постоянен и изменчив одновременно.источник
this