Ordre d'initialisation OO
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:
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 ?