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 :
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 ?
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 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; }
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 !
Partager