我有几个类,每个类都依赖于在依赖链中使用另一个对象的实例。它看起来像这样:
class A {} ;
class B
{
A& m_a;
public:
B(A& a) : m_a(a) { }
};
class C
{
B& m_b;
public:
C(B& b) : m_b(b) { }
};
为了防止因为破坏的顺序而持有悬空引用,我将所有这些都保存在容器类中,如下所示:
struct Data
{
Data() : m_b(m_a), m_c(m_b) { }
A m_a;
B m_b;
C m_c;
};
假设类Data
中成员的顺序与依赖顺序匹配,这样做是否安全?持有这些我缺少的参考文献是否有任何陷阱?
答案 0 :(得分:3)
没关系。类成员按顺序初始化,声明它们,所以:
m_a
已初始化 - > m_b
初始化时参考m_a
- > m_c
初始化时参考m_b
。
答案 1 :(得分:1)
没问题 - C ++保证按照声明的顺序构造类成员,这样你就是安全的。