this
指针的值是否保证在特定对象的生命周期内保持不变?我无法想象它会改变的情况,但不知道我是否没有错过什么。
this
指针的值是否保证在特定对象的生存期内保持不变?
是的。
正如用户 Aconcagua 所说:指针的值始终this
在1上调用函数的对象地址的值。所以这个问题等价于:
对象能否在生命周期内更改其内存地址?
根据lifetime
2的定义,这是不可能的。对象的生存期从获取其存储时或之后开始,在释放之前结束。
1([class.this]/1
在非静态(
[class.mfct]
(成员函数的主体中,关键字this
是一个prvalue,其值是指向调用该函数的对象的指针。
2([basic.life]/1
(强调我的(
生存期是对象或引用的运行时属性。如果变量是默认初始化的,则称该变量具有空初始化,如果它是类类型或其(可能是多维(数组,则该类类型具有简单的默认构造函数。类型
T
对象的生存期在以下情况下开始:
- 获得具有
它的初始化(T
型适当对齐和大小的存储,以及- 如果有的话(是完整的(包括空初始化((
[dcl.init]
(,除了如果对象是联合成员或其子对象,则只有当该联合成员是联合中的初始化成员([dcl.init.aggr]
,[class.base.init]
(或如[class.union]
中所述时,其生命周期才开始。类型为
T
o
的对象生存期在以下情况下结束:
- 如果
T
是非类类型,则销毁对象,或者- 如果
对象T
是类类型,则析构函数调用启动,或者- 占用的存储被释放,或被未嵌套在
o
中的对象重用([intro.object]
(。
对象具有存储区域。this
点在那里。
[intro.object]/1
一个物体在其建造期间(
[class.cdtor]
(、整个生命周期和破坏期间([class.cdtor]
(占据一个存储区域。
如果程序读取它,如果随后读取值的某些位无法进行垃圾回收,或者随后读取值的某些位在程序外部转义,则保证this
的值是恒定的。在所有其他情况下,它的行为就像薛定谔的猫,也就是说,它同时是恒定和可变的。