我写了这样的课:
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;
答案 0 :(得分:3)
如果我重新排序那样的字段,它会继续工作吗?
否,因为数据成员按照类定义中声明的顺序进行初始化。因此,decodedMsg
的初始化将首先发生,这意味着您将在尚未构造的对象上调用GetDecodedMsg()
。
另一方面,您当前的版本没问题,因为在您初始化messageBuilder
时已经构建了decodedMsg
。