Una pequeña pregunta sobre la creación de objetos. Decir que tengo estas dos clases:Orden de constructores/destructores de llamada en herencia
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 el principal se crea una instancia de B
:
int main(){
B b;
}
Tenga en cuenta que B
deriva de A
y también tiene un campo de tipo A
.
Estoy tratando de descubrir las reglas. Sé que al construir un objeto primero llama a su constructor padre, y viceversa cuando se destruye.
¿Qué pasa con los campos (A a;
en este caso)? Cuando se crea B
, ¿cuándo llamará al constructor de A
? 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.
Su ejemplo podría ser más explicativo si su mensaje para el destructor es diferente de su mensaje para el constructor. Además, ¿qué hacen esos 'std :: sort'? – Tom
Además, al experimentar, compare la construcción y la destrucción de 'B b',' B * b = new B(); eliminar b; 'y' A * a = new b(); eliminar a; '(Compare lo que sucede cuando utiliza la palabra clave' virtual' para su destructor, es decir 'virtual ~ A() {cout <<" A D-tor "<< endl;}') – Tom
@Tom, Usted es derecho. Eliminar errores del compilador – iammilind