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_;
};
Foi útil?

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).

...

O referência padrão para isso agora parece ser 12.6.2 seção 13.3:

(13,3) - Em seguida, os membros de dados não-estáticos sã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
scroll top