About catching exception good practices

后端 未结 2 1241
南旧
南旧 2021-02-05 13:08

I\'m writing a little program in C++11 and really use exceptions for one of the first time.

I\'ve got a question about how to catch the exceptions efficiently, and after

相关标签:
2条回答
  • 2021-02-05 13:28

    I suppose that exception should be caught in usual manner by lvalue-reference. Here's good explanation of rvalues-references use

    0 讨论(0)
  • 2021-02-05 13:37

    You should catch by const lvalue reference (2):

    try { throw std::exception{"what"}; }
    catch (const std::exception& ex) {}
    

    Rationale:

    In C++11 it is possible (via use of shared_future) that two threads could be unwinding the same exception at the same time. This can happen in your code even if you are not aware of shared_future being used, unless you control the entire application.

    If two threads are caught unwinding the same exception simultaneously, and one or both of the threads modifies the exception, then you've got a race condition.

    So as long as you don't have to modify the exception object in the catch clause, let the compiler enforce that policy for you - catch by const&. If you really do need to modify the exception, then make a copy of it, modify the copy and throw the copy. You can do this by catching by value if you are sure this won't slice your exception object (which is not usually the case if you are catching std::exception).

    0 讨论(0)
提交回复
热议问题