在这种情况下,是否将对另一个对象的引用作为成员安全?

时间:2014-08-18 09:21:58

标签: c++ reference

我有几个类,每个类都依赖于在依赖链中使用另一个对象的实例。它看起来像这样:

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中成员的顺序与依赖顺序匹配,这样做是否安全?持有这些我缺少的参考文献是否有任何陷阱?

2 个答案:

答案 0 :(得分:3)

没关系。类成员按顺序初始化,声明它们,所以:

m_a已初始化 - > m_b初始化时参考m_a - > m_c初始化时参考m_b

答案 1 :(得分:1)

没问题 - C ++保证按照声明的顺序构造类成员,这样你就是安全的。