-Lista de inicialização ordem de avaliação construtor
Pergunta
Eu tenho um construtor que leva alguns argumentos. I tinha assumido que eles foram construídos na ordem listada, mas, num caso, afigura-se que eles estavam a ser construído em resultante inversa em abortar. Quando eu inverteu os argumentos o programa parou de abortar. Este é um exemplo da sintaxe que estou usando. A coisa é, a_ precisa ser inicializado antes b_ neste caso. você pode garantir a ordem de construção?
por exemplo.
class A
{
public:
A(OtherClass o, string x, int y) :
a_(o), b_(a_, x, y) { }
OtherClass a_;
AnotherClass b_;
};
Solução
Depende da ordem de declaração de variável de membro da classe. Então a_
será o primeiro um, depois b_
será o segundo no seu exemplo.
Outras dicas
Para citar o padrão, para esclarecimento:
12.6.2.5
A inicialização deve proceder na seguinte ordem:
...
- Em seguida, membros de dados não-estáticos serão inicializados na ordem em que foram declarados na definição da classe (Novamente, independentemente da ordem dos mem-initializers).
...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow