抛出未处理的异常后过早离开的析构函数是否可以释放成员数据?

大师

据我所知,析构函数的工作顺序与构造函数的顺序相反:

  • 构造函数初始化成员数据(在ctor-init列表中),然后执行其主体。

  • 销毁程序执行其主体,然后销毁成员数据(在销毁阶段)。

  • 我知道析构函数不应引发异常,如果引发异常,则它本身应处理该异常。

**出于好奇的考虑:如果析构函数引发异常而没有处理该异常,那么该销毁它销毁成员数据还是将其释放吗?(因为它过早离开,因此跳过了破坏阶段)。

 struct Bar{};

 struct Foo{
     ~Foo()noexcept(false){
         throw 1024;// leaves here prematurely
     }

     Bar b{};
 };

那么FooDtor的Dtor是否会b在抛出后释放而不处理异常?

**我知道我不应该这样做,而只是想了解更多有关异常处理的工作方式。谢谢!

埃雷里卡

如果析构函数在不处理异常的情况下引发异常,则应该销毁成员数据

是的。

那么,Foo的Dtor会在抛出后不处理异常的情况下释放b吗?

b具有琐碎的类型,因此其“析构函数”不执行任何操作。但是,是的,该成员被销毁了。成员不是“被释放”的人。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以在C ++中自动生成析构函数?

来自分类Dev

C ++析构函数是否总是或仅有时调用数据成员析构函数?

来自分类Dev

如果后代类没有非静态成员或析构函数,是否需要虚拟析构函数?

来自分类Dev

运行析构函数时是否可以不破坏obj?

来自分类Dev

是否可以不调用父析构函数?

来自分类Dev

可以访问析构函数中的静态成员的静态对象

来自分类Dev

当我可能从`noexcept`析构函数抛出异常时,Clang可以警告我吗?

来自分类Dev

从析构函数中抛出异常对于vtable是安全的吗?

来自分类Dev

RAII类的析构函数抛出异常

来自分类Dev

如何从成员析构函数中捕获异常

来自分类Dev

C ++析构函数以释放内存

来自分类Dev

在C ++中,当delete调用析构函数时,析构函数的主体是否在释放内存之前触发?

来自分类Dev

处理析构函数内部的异常(但不抛出)

来自分类Dev

C ++模板:检查类型的析构函数是否可以被“忽略”

来自分类Dev

如何检测构造函数是否为带有抛出析构函数的异常

来自分类Dev

在调用析构函数之前删除C ++动态成员数组

来自分类Dev

抛出未处理的异常后过早离开的析构函数是否可以释放成员数据?

来自分类Dev

为什么我无法处理从析构函数外部抛出的异常?

来自分类Dev

析构函数限制-从析构函数访问托管成员

来自分类Dev

析构函数引发异常

来自分类Dev

SAP Crystal Report SetDataSource函数抛出“未处理的异常”

来自分类Dev

类的析构函数是否会自动为char *类型的数据成员释放内存?C ++

来自分类Dev

默认析构函数是否释放成员指针指向的内存?

来自分类Dev

从析构函数调用非成员函数可以吗?

来自分类Dev

析构函数/释放内存的问题

来自分类Dev

C++ 可以使析构函数不调用类成员的析构函数和基类的析构函数吗?

来自分类Dev

通过复制将对象传递给 CUDA 内核会调用其析构函数并过早释放内存

来自分类Dev

系统抛出未处理的异常

来自分类Dev

可以访问类数据成员并在析构函数中对它们执行操作吗?

Related 相关文章

  1. 1

    是否可以在C ++中自动生成析构函数?

  2. 2

    C ++析构函数是否总是或仅有时调用数据成员析构函数?

  3. 3

    如果后代类没有非静态成员或析构函数,是否需要虚拟析构函数?

  4. 4

    运行析构函数时是否可以不破坏obj?

  5. 5

    是否可以不调用父析构函数?

  6. 6

    可以访问析构函数中的静态成员的静态对象

  7. 7

    当我可能从`noexcept`析构函数抛出异常时,Clang可以警告我吗?

  8. 8

    从析构函数中抛出异常对于vtable是安全的吗?

  9. 9

    RAII类的析构函数抛出异常

  10. 10

    如何从成员析构函数中捕获异常

  11. 11

    C ++析构函数以释放内存

  12. 12

    在C ++中,当delete调用析构函数时,析构函数的主体是否在释放内存之前触发?

  13. 13

    处理析构函数内部的异常(但不抛出)

  14. 14

    C ++模板:检查类型的析构函数是否可以被“忽略”

  15. 15

    如何检测构造函数是否为带有抛出析构函数的异常

  16. 16

    在调用析构函数之前删除C ++动态成员数组

  17. 17

    抛出未处理的异常后过早离开的析构函数是否可以释放成员数据?

  18. 18

    为什么我无法处理从析构函数外部抛出的异常?

  19. 19

    析构函数限制-从析构函数访问托管成员

  20. 20

    析构函数引发异常

  21. 21

    SAP Crystal Report SetDataSource函数抛出“未处理的异常”

  22. 22

    类的析构函数是否会自动为char *类型的数据成员释放内存?C ++

  23. 23

    默认析构函数是否释放成员指针指向的内存?

  24. 24

    从析构函数调用非成员函数可以吗?

  25. 25

    析构函数/释放内存的问题

  26. 26

    C++ 可以使析构函数不调用类成员的析构函数和基类的析构函数吗?

  27. 27

    通过复制将对象传递给 CUDA 内核会调用其析构函数并过早释放内存

  28. 28

    系统抛出未处理的异常

  29. 29

    可以访问类数据成员并在析构函数中对它们执行操作吗?

热门标签

归档