Exception handling before and after main

后端 未结 4 756
再見小時候
再見小時候 2021-02-15 17:52

Is it possible to handle exceptions in these scenarios:

  1. thrown from constructor before entering main()
  2. thrown from destructor after leaving main()
4条回答
  •  闹比i
    闹比i (楼主)
    2021-02-15 17:54

    1. You can wrap up your constructor withing a try-catch inside of it.
    2. No, you should never allow exception throwing in a destructor.

    The funny less-known feature of how to embed try-catch in a constructor:

    object::object( int param )
    try
      : optional( initialization )
    {
       // ...
    }
    catch(...)
    {
       // ...
    }
    

    Yes, this is valid C++. The added benefit here is the fact that the try will catch exceptions thrown by the constructors of the data members of the class, even if they're not mentioned in the ctor initializer or there is no ctor initializer:

    struct Throws {
      int answer;
      Throws() : answer(((throw std::runtime_error("whoosh!")), 42)) {}
    };
    
    struct Contains {
      Throws baseball;
      Contains() try {} catch (std::exception& e) { std::cerr << e.what() << '\n'; }
    };
    

提交回复
热议问题