Search code examples
c++exception

Catching exceptions from a constructor's initializer list


Here's a curious one. I have a class A. It has an item of class B, which I want to initialize in the constructor of A using an initializer list, like so:

class A {
    public:
    A(const B& b): mB(b) { };

    private:
    B mB;
};

Is there a way to catch exceptions that might be thrown by mB's copy-constructor while still using the initializer list method? Or would I have to initialize mB within the constructor's braces in order to have a try/catch?


Solution

  • Have a read of http://weseetips.wordpress.com/tag/exception-from-constructor-initializer-list/)

    Edit: After more digging, these are called "Function try blocks".

    I confess I didn't know this either until I went looking. You learn something every day! I don't know if this is an indictment of how little I get to use C++ these days, my lack of C++ knowledge, or the often Byzantine features that litter the language. Ah well - I still like it :)

    To ensure people don't have to jump to another site, the syntax of a function try block for constructors turns out to be:

    C::C()
    try : init1(), ..., initn()
    {
      // Constructor
    }
    catch(...)
    {
      // Handle exception
    }