繁体   English   中英

`this` 指针的值在对象的生命周期内是常量吗?

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

this指针的值是否保证在特定对象的生命周期内保持不变? 我无法想象它会改变的情况,但不知道我是否没有遗漏一些东西。

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

是的

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

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

根据lifetime 2的定义,这是不可能的。 一个对象的生命周期在它的存储被获取时或之后开始,在它被释放之前结束。


1) [class.this]/1

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

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

对象或引用的生命周期是对象或引用的运行时属性。 如果一个变量是默认初始化的,并且它是类类型或其(可能是多维的)数组,则该类类型具有一个平凡的默认构造函数,则称该变量具有空初始化。 类型T的对象的生命周期开始于

  • 获得具有类型T的正确对齐和大小的存储,并且
  • 它的初始化(如果有)已完成(包括[dcl.init]初始化)( [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保证是恒定的,如果该程序不断读取它,如果读值,随后一些位是不可能的垃圾收集或如果随后的读取值的一些位躲过程序之外。 在所有其他情况下,它的行为就像薛定谔的猫,也就是说,它同时是常数和可变的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM