【发布时间】:2015-01-27 06:14:36
【问题描述】:
我有一个有两种状态的类,不同的成员只适用于一种状态或另一种状态。
哪种做法更好:
- 选项 1:构造函数仅初始化与第一个(初始)状态相关的成员
- 选项 2:初始化每个成员,即使这意味着为成员创造“未初始化”值?
例如
class Foo {
public:
enum State { A, B };
// Constructor
// Option 1: Only initialize first state
Foo(int a1) : _state(A), _a1(a1) {}
// ... or ...
// Option 2: initialize every member
Foo(int a1) : _state(A), _a1(a1), b1(-1), b2(-1) {}
State getState() const { return _state; }
// Only applicable if State is A
int getA1() const { return _a1; } // Might also add assert that State is A
// Only applicable if State is B
int getB1() const { return _b1; } // Might also add assert that State is B
int getB2() const { return _b2; } // Might also add assert that State is B
private:
State _state;
int _a1;
int _b1;
int _b2;
};
【问题讨论】:
-
经验法则:初始化所有成员(C++ 11:您可以编写 int _a1 = 0 进行默认初始化)。但每条规则都适用于豁免。