de l'initialisation des membres statiques (dont l'un depend de l'autre)
Bonjour,
Je fais suite à un précédent post, résolu, dans lequel je voulais initialiser un membre statique Date::todayd.
Je voudrais aussi initialiser un autre membre statique Date::today_init indiquant si l'initialisation de Date::todayd a fonctionné.
J'écris donc le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| namespace {
Date InitToday(bool &success){
[...] //initialisation de today, qui peut ne pas marcher et lever une exception.
// success=true si ca a marché
}
}
bool success = false;
Date Date::todayd = InitToday(success); // **(1)
bool Date::today_init=success; // **(2)
const Date& Date::today() {
if (!today_init)
throw Bad_date();
return todayd;
} |
Pourtant, en lisant la FAQ sur l'initialisation des variables statiques, j'ai un doute. Si je comprends bien il n'y a pas de guarantie sur l'ordre de l'initialisation; càd **(2) pourrait etre executé avant **(1), et donc today_init aurait un mauvais état. Est-ce que je comprends bien ?
Si c'est bien le cas alors mon code est incorrect.
Je cherche une solution pour initialiser à coup sûr ces deux membres en un seul coup, sachant que today_init depend de ce qui s'est passé pour l'initialisation de todayd.
Mais pour l'instant je ne vois pas.
J'avais pensé à setter Date::today_init=true dans InitToday(), mais today_init est un attribut privé de Date, et je souhaite le conserver ainsi.
Quelqu'un aurait un conseil ou une idée à me donner à ce sujet ?
Merci aux experts ;) !