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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…