可能重复:
如果构造函数抛出异常,是否调用析构函数?
我有一个问题要问你。当构造函数抛出异常时,是否执行析构函数?示例代码:
#include <cstdio>
struct Test
{
Test (void)
{
throw 100;
}
~Test (void)
{
printf ("~Test\n");
}
};
int main (void)
{
try
{
Test test;
}
catch (int value)
{
}
}
运行此代码时,不显示“~Test”。好的,我可以理解这种行为。假设 Test 有动态分配的成员,这些成员在构造函数中分配,在析构函数中删除。当在构造函数中分配异常后抛出异常时,它们会发生什么?