据我所知,析构函数的工作顺序与构造函数的顺序相反:
构造函数初始化成员数据(在ctor-init列表中),然后执行其主体。
销毁程序执行其主体,然后销毁成员数据(在销毁阶段)。
我知道析构函数不应引发异常,如果引发异常,则它本身应处理该异常。
**出于好奇的考虑:如果析构函数引发异常而没有处理该异常,那么该销毁它销毁成员数据还是将其释放吗?(因为它过早离开,因此跳过了破坏阶段)。
struct Bar{};
struct Foo{
~Foo()noexcept(false){
throw 1024;// leaves here prematurely
}
Bar b{};
};
那么Foo
Dtor的Dtor是否会b
在抛出后释放而不处理异常?
**我知道我不应该这样做,而只是想了解更多有关异常处理的工作方式。谢谢!
如果析构函数在不处理异常的情况下引发异常,则应该销毁成员数据
是的。
那么,Foo的Dtor会在抛出后不处理异常的情况下释放b吗?
b
具有琐碎的类型,因此其“析构函数”不执行任何操作。但是,是的,该成员被销毁了。成员不是“被释放”的人。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句