对象存在于C 中是什么意思

What does it mean for an object to exist in C++?

本文关键字:是什么 意思 存在 对象      更新时间:2023-10-16

[class.dtor]/15读,重点是我的:

一旦调用对象的破坏者,对象不再存在;如果对寿命已经结束的对象调用破坏者,则行为是不确定的(3.8)。

但是,据我所知,这是标准对象"现有"的唯一参考。这似乎也与[Basic.Life]相反,这是更具体的:

类型T对象的寿命结束时:

  • 如果T是具有的类类型> 非平凡的驱动器(12.4),则destructor呼叫开始,或

  • 对象占据的存储被重复使用或释放。

我们这里有两个不同的措辞:"对象结束的寿命"answers"对象不再存在",前者唯一发生在非平凡的驱动器中,而后者则发生在 any 的情况下发生驱动器。差异的意义是什么?对象不再存在的含义是什么?

引用的措辞似乎意味着编译器可以正确插入与对象相关的内存,以返回与对象相关联的内存,以启动器的destructor 。但是这样做将消除对象在破坏过程中引用其自己成员的能力,如果对象能够破坏自身。

所以我认为引用的措辞被打破并应修复。

关于"生命周期"answers"存在"的意思,我建议有一些不同的上下文,其中它们的意思是不同的事情:

在构造,生命周期和存在的背景下,构造器开始时开始。在这种情况之外,它们在构造函数结束时开始。

在破坏,生命周期和存在的情况下结束时结束。在这种情况之外,它们在破坏开始时结束。

因此,一个对象可以在施工期间指其自己的成员,并有可能将自己转移到其他对象的功能,该功能可能是指对象及其成员,等等。但是通常,直到其构造函数完成后,可能不会引用对象(课堂实例)(不产生未定义的行为)。

和一个对象的驱动器可以参考其自己的成员并调用其他(现有)对象的功能,这可能是指被摧毁和/或其成员的对象。但是通常,在其破坏者启动后可能不会引用一个对象。

这种多上下文定义对我来说是最有意义的,但是我可以看到,从分配内存的那一刻,应该将对象视为活着的对象,直到发布内存的那一刻,我要说的是,当其一个构造函数启动时,应分配一个浅副本的内存,并在其破坏者结束时释放。