在对象的生命周期中,`this`指针的值是否恒定?

问题描述 投票:15回答:2

this指针的值在特定对象的生存期内是否保证是恒定的?我无法想象它会改变的情况,但不知道我是否不缺少任何东西。

c++ this language-lawyer object-lifetime
2个回答
24
投票

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

正如用户Aconcagua所说:this指针总是的值是在1上调用了函数的对象的地址值。因此,问题等同于:

对象可以在整个生命周期内更改其内存地址吗?

根据lifetime 2]的定义,这是不可能的。对象的生存期从获取对象的时间或之后开始,到释放对象的生存期结束。


1]

[class.this]/1

在非静态([class.this]/1)成员函数的主体中,关键字[class.mfct]prvalue

,其值是指向调用该函数的对象的指针。

2)

this(强调我的意思)

对象或引用的生存期是对象或引用的运行时属性。如果变量是默认初始化的,则该变量被称为具有空虚的初始化;如果它是类类型或其(可能是多维)数组,则该类类型具有琐碎的默认构造函数。[basic.life]/1类型的对象的生存期开始于

  • << [storage具有正确的对齐方式和大小对于类型[basic.life]/1,获得,和其初始化(如果有的话)是完整的(包括虚空初始化)(T),除了如果对象是联合成员或其子对象,则其生存期仅在该联合成员是联合中的初始化成员时才开始( T[dcl.init]),或如[dcl.init.aggr]中所述。
  • 类型为[class.base.init]的对象[class.union]的生存期在以下时间结束

    如果o是非类类型,则对象被销毁,或
  • 如果T是类类型,则析构函数调用开始,或者
  • 释放对象占用的存储空间
  • ,或由未嵌套在TT)中的对象重用。

8
投票
对象具有存储区域。 o指向那里。
© www.soinside.com 2019 - 2024. All rights reserved.