可以在初始化列表中引用类的字段吗?

时间:2013-04-30 17:55:53

标签: c++

我写了这样的课:

class FastDecoder
{
public:
    FastDecoder(void);
    ~FastDecoder(void);
private:
    SnapshotMessageBuilder messageBuilder;
    DecodedMsg const& decodedMsg;
};

如果使用messageBuilder初始化decodedMsg

是正确的
FastDecoder::FastDecoder(void):
    decodedMsg(messageBuilder.GetDecodedMsg())
{

我怀疑由于FastDecoder尚未构建,因此并非所有字段都被初始化,因此我可以通过运行时错误操作来访问messageBuilder

如果我的代码不好,那么如何更好地重写它?如果我重新排序这样的字段,它会继续工作吗?

private:
    DecodedMsg const& decodedMsg;
    SnapshotMessageBuilder messageBuilder;

1 个答案:

答案 0 :(得分:3)

  

如果我重新排序那样的字段,它会继续工作吗?

,因为数据成员按照类定义中声明的顺序进行初始化。因此,decodedMsg的初始化将首先发生,这意味着您将在尚未构造的对象上调用GetDecodedMsg()

另一方面,您当前的版本没问题,因为在您初始化messageBuilder时已经构建了decodedMsg