Чи thisгарантовано, що значення покажчика є постійним протягом життя певного об'єкта?
Так .
Як зазначає користувач Aconcagua : значення thisвказівника завжди є значенням адреси об'єкта, на якому функція викликалася 1 . Тож питання еквівалентно:
Чи може об’єкт змінити свою адресу пам'яті протягом життя?
Це неможливо, за визначенням lifetime2 . Термін експлуатації предмета починається, коли або після його зберігання, і закінчується до моменту його звільнення.
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вказівника завжди - це значення адреси об’єкта, на який була викликана функція. Отже, питання еквівалентно "чи може об'єкт змінити свою пам'ять протягом життя?"