Salut !

Je me pose une question, dont la réponse me semblait évident mais faute de trouver de source m'inquiète.

Prenons le code suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
class A
{
   public:
      A() {}
};
 
class B
{
   public:
      B( A& a ) :
         _A( a ) {}
      A& _A;
};
 
class AB
{
   public:
      AB() :
         _B( _A ), // ici l'ordre est inversé, c'est fait exprès
         _A()
      {
      }
 
   A _A;
   B _B;
};
Est-ce que ce code est sûr ?
Est-ce qu'on peut affirmer que _A sera initialisé avant _B et que donc _B._A ne référencera pas une zone mémoire non alloué, ou est-ce que le comportement est indéfini par la norme ?