c++ - Orden de evaluación de la lista de inicialización del constructor
gcc c++-faq (3)
Depende del orden de declaración de la variable miembro en la clase. Entonces a_
será el primero, entonces b_
será el segundo en tu ejemplo.
Tengo un constructor que toma algunos argumentos. Supuse que se construyeron en el orden indicado, pero en un caso parece que se estaban construyendo en reversa, lo que resultó en un aborto. Cuando revocé los argumentos, el programa dejó de abortar. Este es un ejemplo de la sintaxis que estoy usando. La cosa es que, a_ necesita ser inicializado antes de b_ en este caso. ¿Se puede garantizar el orden de construcción?
p.ej
class A
{
public:
A(OtherClass o, string x, int y) :
a_(o), b_(a_, x, y) { }
OtherClass a_;
AnotherClass b_;
};
La referencia estándar para esto ahora parece ser 12.6.2 sección 13.3:
(13.3) - Luego, los miembros de datos no estáticos se inicializan en el orden en que fueron declarados en la definición de la clase (nuevamente, independientemente del orden de los inicializadores de memoria).
Para citar la norma, para aclarar:
12.6.2.5
La inicialización se realizará en el siguiente orden:
...
- Luego, los miembros de datos no estáticos se inicializarán en el orden en que fueron declarados en la definición de la clase (de nuevo, independientemente del orden de los inicializadores de memoria).
...