If I jump out of a catch-block with “goto”, am I guaranteed that the exception-object will be free'ed?

后端 未结 2 574
清歌不尽
清歌不尽 2021-02-13 13:47

I have such code as follows

try {
  doSomething();
} catch(InterruptException) {
  goto rewind_code;
}

if(0) {
rewind_code:
  longjmp(savepoint, 1);
}
         


        
2条回答
  •  再見小時候
    2021-02-13 14:29

    §6.6/2:

    On exit from a scope (however accomplished), destructors (12.4) are called for all constructed objects with automatic storage duration...

    At least as I'd read it, "however accomplished" should/does include a goto.

    Edit: Okay, based on Johannes's comment, what we care about is §15.1/4:

    When the last handler being executed for the exception exits by any means other than throw; the temporary object is destroyed and the implementation may deallocate the memory for the temporary object;

    [ ... ]

    The destruction occurs immediately after the destruction of the object declared in the exception-declaration in the handler.

提交回复
热议问题