2016-09-06 69 views
1

的顺序考虑继承和初始化

class A 
    { 
    }; 

class B 
    { 
    B(A * in); 
    }; 

class C : public A 
    { 
    B b; 
    public: 
    C():b(this){} 
    }; 

是在C安全构造? A的成员是否已经可用(和构建)?

+0

定义 “安全” ... –

回答

4

是的。所有基类都是在执行构造函数的其余部分之前构造的。

例如,从Stroustrup的C++ 2011的书:

17.2.3 Base and Member Destructors 
Constructors and destructors interact correctly with class hierarchies (§3.2.4, Chapter 20). A constructor 
builds a class object ‘‘from the bottom up’’: 
[1] first, the constructor invokes its base class constructors, 
[2] then, it invokes the member constructors, and 
[3] finally, it executes its own body. 
A destructor ‘‘tears down’’ an object in the reverse order: 
[1] first, the destructor executes its own body, 
[2] then, it invokes its member destructors, and 
[3] finally, it inv okes its base class destructors. 
+1

除了当'B'的构造函数试图调用上'in'一个'virtual'功能。 – LogicStuff