Why should I prefer to use member initialization lists?

后端 未结 9 1260
醉酒成梦
醉酒成梦 2020-11-21 04:43

I\'m partial to using member initialization lists with my constructors... but I\'ve long since forgotten the reasons behind this...

Do you use member initialization

9条回答
  •  醉话见心
    2020-11-21 05:32

    Next to the performance issues, there is another one very important which I'd call code maintainability and extendibility.

    If a T is POD and you start preferring initialization list, then if one time T will change to a non-POD type, you won't need to change anything around initialization to avoid unnecessary constructor calls because it is already optimised.

    If type T does have default constructor and one or more user-defined constructors and one time you decide to remove or hide the default one, then if initialization list was used, you don't need to update code if your user-defined constructors because they are already correctly implemented.

    Same with const members or reference members, let's say initially T is defined as follows:

    struct T
    {
        T() { a = 5; }
    private:
        int a;
    };
    

    Next, you decide to qualify a as const, if you would use initialization list from the beginning, then this was a single line change, but having the T defined as above, it also requires to dig the constructor definition to remove assignment:

    struct T
    {
        T() : a(5) {} // 2. that requires changes here too
    private:
        const int a; // 1. one line change
    };
    

    It's not a secret that maintenance is far easier and less error-prone if code was written not by a "code monkey" but by an engineer who makes decisions based on deeper consideration about what he is doing.

提交回复
热议问题