"this"指针的值在对象的生存期内是否恒定?

Is the value of `this` pointer constant during the object's lifetime?

本文关键字:是否 对象 this 指针 生存期      更新时间:2023-10-16

this指针的值是否保证在特定对象的生命周期内保持不变?我无法想象它会改变的情况,但不知道我是否没有错过什么。

this指针的值是否保证在特定对象的生存期内保持不变?

是的

正如用户 Aconcagua 所说:指针的值始终this1上调用函数的对象地址的值。所以这个问题等价于:

对象能否在生命周期内更改其内存地址?

根据lifetime2的定义,这是不可能的。对象的生存期从获取其存储时或之后开始,在释放之前结束。

<小时 />

1([class.this]/1

在非静态([class.mfct](成员函数的主体中,关键字this是一个prvalue,其值是指向调用该函数的对象的指针。

2([basic.life]/1(强调我的(

对象或引用的

生存期是对象或引用的运行时属性。如果变量是默认初始化的,则称该变量具有空初始化,如果它是类类型或其(可能是多维(数组,则该类类型具有简单的默认构造函数。类型T对象的生存期在以下情况下开始

  • 获得具有T型适当对齐和大小的存储,以及
  • 它的初始化(
  • 如果有的话(是完整的(包括空初始化(([dcl.init](,除了如果对象是联合成员或其子对象,则只有当该联合成员是联合中的初始化成员([dcl.init.aggr][class.base.init](或如[class.union]中所述时,其生命周期才开始。

类型为To的对象生存期在以下情况下结束

  • 如果T是非类类型,则销毁对象,或者
  • 如果T是类类型,则析构函数调用启动,或者
  • 对象
  • 占用的存储被释放,或被未嵌套在o中的对象重用([intro.object](。

对象具有存储区域。this点在那里。

[intro.object]/1

一个物体在其建造期间([class.cdtor](、整个生命周期和破坏期间([class.cdtor](占据一个存储区域。

如果程序读取它,如果随后读取值的某些位无法进行垃圾回收,或者随后读取值的某些位在程序外部转义,则保证this的值是恒定的。在所有其他情况下,它的行为就像薛定谔的猫,也就是说,它同时是恒定和可变的。