|
1
2
按照[except.ctor]/3的简单表述,它适用于具有任何存储持续时间的对象,只要它们是其构造因异常而终止的对象的子对象。这不应该引起争议。 然而,[except.ctor]的措辞随着时间的推移发生了变化,这似乎产生了OP已经注意到的一些问题。背景是,过去的措辞与当前的措辞类似,“堆栈展开”只是指自动对象的销毁,有人注意到这造成了不一致,当没有找到匹配的处理程序时,无法保证是否发生堆栈展开,但 是 保证子对象销毁发生(因为文本中没有任何内容表明如果找不到处理程序可能不会发生)。这是 CWG 1774 .CWG同意这种不一致是不可取的(也许这是无意的,尽管该页面没有说明)。因此,措辞发生了变化,子对象销毁将是“堆栈展开”的一个方面,因此包含在[except.handle]/9中,而不是作为一个单独的过程。但后来,为了解决 a different DR 这与例外情况无关,旧的措辞被重新添加,我90%确信这是无意的。CWG2256决议的目的只是为了避免对琐碎的可破坏对象的歧视,而不是真正改变异常处理的任何内容。 因此,当前的措辞是有缺陷的,该标准仍应被解读为“堆栈展开”包括子对象销毁( 即 ,CWG 1774的决议生效)。你甚至可以通过编辑来解决这个问题( 即 ,针对标准源提交拉取请求)。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |