Search code examples
c++classinstancecreation

C++ How does order of instance creation matter?


I have a class that creates instances of other classes, and when I call them, compiler gives me warning about order of the instances. Why does it matter? It does same job, regardless of the order.

E.g. I have this in my core class header file (core class handles game loop):

HUD hud;
World myWorld;

Like this they do all they need to. But compiler gives a warning:

'Core::myWorld' will be initialized after [-Wreorder]|

Then if I put myWorld instance above the hud instance, it doesn't give me warning anymore. I was just wondering, how on earth does it matter which order they are in?


Solution

  • Warning is since, in constructor initializer-list you initialize World before HUD, but actually members will be initialized in order they are declared in class.

    Just litle example, where it can be worse:

    class B
    {
    public:
       B(int i) : value(i) {}
    private:
       int value;
    };
    
    class A
    {
    public:
       A() : value(10), b(value)
       {
       }
    private:
       B b;
       int value;
    };
    

    Here b will be initialized before value and so, something will be sended to b constructor, but not 10 as programmer want.