我写了这样的课:

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;

最佳答案



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

另一方面,您当前的版本还可以,因为在初始化messageBuilderdecodedMsg已经已经构造好了。

关于c++ - 可以在初始化列表中引用该类的字段吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16306083/

10-13 07:33