我们有一个类,其语义行为如下:-
struct Sample
{
~Sample() throw()
{
throw 0;
}
};
void f ()
{
try
{
delete new Sample;
}
catch (...){
}
}
我知道在 dtors 中抛出异常是邪恶的;但是放弃第 3 方库资源会引发异常(但可以立即重新获取,这很奇怪!)。还有一个资源池,比如 Sample 类的数组/容器。因此,有两种情况需要考虑:动态分配对象的销毁和动态分配的对象数组的销毁。
目前,只有在使用数组版本(池)时,应用程序才会在不同的执行点随机崩溃。我们认为这是由于内存损坏,但为什么非池化版本有效?
分配的内存会发生什么?它是未定义的行为吗?在数组的情况下会发生什么?数组的所有元素(比如第一个元素的 dtor 是否抛出)的 dtors(至少,不是内存)是否被调用?
提前致谢,
EDIT-1:好吧,我们将其追踪到一些未调用的数组元素的 dtors。但是分配的内存似乎没有问题......以下是SC22-N-4411.pdf的第5.3.5.7节)
If the value of the operand of the delete-expression is not a null pointer value, the delete-expression will
call a deallocation function (3.7.4.2). Otherwise, it is unspecified whether the deallocation function will be
called. [ Note: The deallocation function is called regardless of whether the destructor for the object or some
element of the array throws an exception. —end note ]
<\截图>
在这种情况下,看起来内存总是被释放。我对标准的解释正确吗?