Чи this
гарантовано, що значення покажчика є постійним протягом життя певного об'єкта?
Так .
Як зазначає користувач Aconcagua : значення this
вказівника завжди є значенням адреси об'єкта, на якому функція викликалася 1 . Тож питання еквівалентно:
Чи може об’єкт змінити свою адресу пам'яті протягом життя?
Це неможливо, за визначенням lifetime
2 . Термін експлуатації предмета починається, коли або після його зберігання, і закінчується до моменту його звільнення.
1) [class.this]/1
У тілі нестатичної функції ( [class.mfct]
) члена ключове слово this
- це перше значення, значення якого є вказівником на об'єкт, для якого викликається функція.
2) [basic.life]/1
(наголос мій)
Термін експлуатації об'єкта чи посилання - це властивість виконання об'єкта чи посилання. Кажуть, що змінна має вакуумну ініціалізацію, якщо вона є ініціалізованою за замовчуванням, і якщо вона класу типу або (можливо, багатовимірний) масив, цей тип класу має тривіальний конструктор за замовчуванням.
Термін експлуатації об'єкта типу T
починається, коли :
- зберігання з правильним вирівнюванням і розміром для типу
T
виходять , і
- його ініціалізація (якщо така є) завершена (включаючи вакуумну ініціалізацію) (
[dcl.init]
), за винятком випадків, якщо об'єкт є членом об'єднання або його суб'єктом, його тривалість життя починається лише в тому випадку, якщо цей член об'єднання є ініціалізованим членом об'єднання ( [dcl.init.aggr]
, [class.base.init]
) або як описано в [class.union]
.
Термін експлуатації об'єкта o
типу T
закінчується, коли :
- якщо
T
це некласовий тип, об'єкт знищується, або
- якщо
T
це тип класу, починається виклик деструктора або
- сховище, яке займає об'єкт, вивільняється або повторно використовується об'єктом, який не вкладений у межах
o
( [intro.object]
).
this
вказівника завжди - це значення адреси об’єкта, на який була викликана функція. Отже, питання еквівалентно "чи може об'єкт змінити свою пам'ять протягом життя?"