Default member values best practice

前端 未结 3 1918
一个人的身影
一个人的身影 2020-12-07 10:53

Is it good practice when writing C++11 code to set default values for class members in the header file of the class?

Or is it better to do this in the constructor of

3条回答
  •  渐次进展
    2020-12-07 11:27

    If a class member is always initialized with the same initial value, then you should make the initializer inline, so as to avoid duplication. If the initial value depends on the constructor, then put it in the constructor initializer list. (And never use assignment in the way you did.)

    Example:

    class Foo
    {
        bool done = false;   // always start like this
        int qty;
        Bar * p;
    
    public:
        Foo()                        : qty(0),              p(nullptr)    { }
        Foo(int q, Bar * bp)         : qty(q),              p(bp)         { }
        explicit Foo(char const * s) : qty(std::strlen(s)), p(new Bar(s)) { }
    
        // ...
    };
    

    In this hypothetical example, the member done is always required to start as false, so it's best to write the initializer inline. The other two members, qty and p, can be initialized differently in each of three different constructors, so they are initialized inside the constructors' initializer lists.

    A curiosum: Note that providing an inline initializer prevents your class from having a trivial default constructor.

提交回复
热议问题