我写了这样的课:
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()
。
另一方面,您当前的版本还可以,因为在初始化messageBuilder
时decodedMsg
已经已经构造好了。
关于c++ - 可以在初始化列表中引用该类的字段吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16306083/