1

我写了这样的课:

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;
4

1 回答 1

3

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

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

另一方面,您当前的版本是可以的,因为messageBuilder在您初始化时已经构建好了decodedMsg

于 2013-04-30T17:57:03.873 回答