Orden de llamar a constructores / destructores en herencia

Una pequeña pregunta sobre la creación de objetos. Digamos que tengo estas dos clases:

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;
};

y en main creo una instancia deB:

int main(){
    B b;
}

Tenga en cuenta queB deriva deA y también tiene un campo de tipoA.

Estoy tratando de descubrir las reglas. Sé que cuando se construye un objeto primero se llama a su constructor padre, y viceversa cuando se destruye.

¿Qué pasa con los campos A a; en este caso)? CuandoB se crea, ¿cuándo llamará aAEl constructor de @? No he definido una lista de inicialización, ¿hay algún tipo de lista predeterminada? ¿Y si no hay una lista predeterminada? Y la misma pregunta sobre la destrucción.

Respuestas a la pregunta(6)

Su respuesta a la pregunta