"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
是一个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
的值是恒定的。在所有其他情况下,它的行为就像薛定谔的猫,也就是说,它同时是恒定和可变的。
相关文章:
- 是否需要删除包含对象的"pair"?
- 是否删除在对象构造过程中创建的对象
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 在这种情况下,java对象是否可以调用本机函数
- 返回指向对象的指针的函数调用是否为 prvalue?
- 具有引用成员的结构是否具有唯一的对象表示形式
- 对象初始化中是否允许指向此成员的指针?
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 堆分配的对象是否存在永不为空的唯一所有者?
- 在函数内创建的对象的范围 - 如果在函数外部存储和访问引用,它们是否有效?
- 是否可以使用一个类来控制 C++ 中另一个类的对象?(阿杜伊诺)
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- QFileSystemModel 对象是否会被删除?
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 是否可以使用分配器对象来释放另一个分配器分配的内存?
- 线程调用的函数对对象删除是否安全?
- 将对象的字节复制到数组并再次复制回来是否安全
- std::memmove在同一对象之间是否始终安全
- 类对象在 c++ 中是否具有数据类型?
- 是否可以将不可复制的成员用作使对象不可复制的替代方法?