Порядок вызова конструкторов / деструкторов при наследовании

Небольшой вопрос о создании объектов. Скажем, у меня есть эти два класса:

struct A{
    A(){cout << "A() C-tor" << endl;}
    ~A(){cout << "~A() D-tor" << endl;}
};

struct B : public A{
    B(){cout << "B() C-tor" << endl;}
    ~B(){cout << "~B() D-tor" << endl;}

    A a;
};

и в основном я создаю экземпляр B :

int main(){
    B b;
}

Обратите внимание, что B происходит от A , а также имеет поле типа A .

Я пытаюсь понять правила. Я знаю, что при построении объекта сначала вызывается его родительский конструктор, а при деструкции - наоборот.

А как насчет полей ( A a; в данном случае)? Когда создается B , когда он вызовет конструктор A ? Я не определил список инициализации, есть ли какой-то список по умолчанию? А если списка по умолчанию нет? И тот же вопрос о разрушении.

38
задан Mat 7 December 2013 в 16:08
поделиться