【发布时间】:2015-07-30 16:26:20
【问题描述】:
[class.dtor]/15 读取,强调我的:
一旦为对象调用析构函数,该对象不再存在;如果为生命周期已结束 (3.8) 的对象调用析构函数,则行为未定义。
但是,据我所知,这是标准中对“现有”对象的唯一引用。这似乎也与更具体的 [basic.life] 形成对比:
T类型对象的生命周期在以下时间结束:
如果
T是具有非平凡析构函数 (12.4) 的类类型,则析构函数调用开始,或者对象占用的存储空间被重用或释放。
我们在这里有两种不同的措辞:“对象的生命周期结束”和“对象不再存在”,前者只发生在非平凡的析构函数中,而后者发生在 any析构函数。差异有什么意义?不再存在的对象意味着什么?
【问题讨论】:
-
C++03 有同样的措辞。让我想知道是否只是粗制滥造需要一些清理。
-
@Tony:在 GCC(ideone 正在使用)上工作的很多东西不是标准的;在那里工作并没有真正的证据表明该标准特别说明了什么。 (我能想到的最大的事情是 GCC 对 C99 风格的 VLA 的支持)
-
@TonyD:
int不是类类型。这意味着生命周期由“对象占用的存储空间被重用或释放”定义。条款。[class.dtor]/15的第一个定义适用于类类型。 -
"exist" 大概与生命开始有关,即also unclear
标签: c++ c++11 language-lawyer c++14 object-lifetime