Tengo algunas dudas sobre las garantías de orden de construcción e inicialización en C++. Por ejemplo, el siguiente código tiene cuatro clases X
, Y
, Z
y W
. La función principal ejemplifica un objeto de class X
, que contiene un objeto de class Y
, y deriva de class Z
, por lo que se invocarán ambos constructores. Además, el parámetro const char*
pasado al constructor X
se convertirá implícitamente en un objeto de class W
, por lo que el constructor W
también se debe invocar.C++: garantías de pedido de construcción e inicialización
¿Cuáles son las garantías que ofrece el estándar C++ en el orden de las llamadas a los constructores de copia? O, de manera equivalente, ¿qué puede imprimir este programa?
#include <iostream>
class Z {
public:
Z() { std::cout << "Z" << std::endl; }
};
class Y {
public:
Y() { std::cout << "Y" << std::endl; }
};
class W {
public:
W(const char*) { std::cout << "W" << std::endl; }
};
class X : public Z {
public:
X(const W&) { std::cout << "X" << std::endl; }
private:
Y y;
};
int main(int, char*[]) {
X x("x");
return 0;
}
editar: ¿Es correcto?
W |
/ \ |
Z Y |
\ / |
X V
El orden será W, Z, Y, X pero no estoy seguro de las reglas específicas. –
¿Cuál es la relación entre Y y W? – curiousguy