Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Gerer l'ordre de construction d'objets

4 réponses
Avatar
Dominique Vaufreydaz
Bonjour,

le contexte. 1 librarie à 3 niveaux, chaque niveau necessitant des
initialisation puor des objets globaux (des objets qui font chercher
leur configuratin dans le systeme) et ceci pour des raison
d'optimisation (en gros, je veux pas faire un getenv/parse a chaque
appel de fonction).

Jusque maintenant, l'ordre de construction de mes objets
qui contiennent donc des membres static, ne me posait pas de probleme.
J'aimerai avoir un nouveau comportement ou je dois creer un objet global
avant le main. Et la, ca me pose probleme. En effet, rien ne me garantie
l'ordre de construction des objets. Hors, ce nouvel objet a besoin que tout
soit initialiser avant d'etre construit lui-meme.

J'ai deja trouve des solutions peu elegantes. Auriez-vous une idée de solution
élégante a me proposer ? Par exemple, un truc d'heritage qui me serait pas
venu ?

En vous remerciant par avance. Cordialement. Doms.

4 réponses

Avatar
Jean-Marc Bourguet
"Dominique Vaufreydaz" writes:

Bonjour,

le contexte. 1 librarie à 3 niveaux, chaque niveau necessitant des
initialisation puor des objets globaux (des objets qui font chercher
leur configuratin dans le systeme) et ceci pour des raison
d'optimisation (en gros, je veux pas faire un getenv/parse a chaque
appel de fonction).


* On peut utiliser le fait que dans une unite de compilation, les
variables globales sont construites dans leur ordre d'apparition.

* On peut utiliser le fait que les variables locales statiques sont
intialisees au premier appel d'une fonction. On fait une fonction qui
retourne une reference vers cette variable locale statique.

* On peut utiliser le fait que l'initialisation des variables globales
commence par unitialisation a 0. On fait un fonction retournant une
reference vers la variable globale qui commence par tester si une variable
globale auxilliaire est nulle et dans ce cas initialise.

On peut encapsuler cela dans une classe singleton. Faire une recherche sur
ce mot cle devrait donner des exemples et d'autres variations.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Michel Decima
"Dominique Vaufreydaz" writes:

Bonjour,

le contexte. 1 librarie à 3 niveaux, chaque niveau necessitant des
initialisation puor des objets globaux (des objets qui font chercher
leur configuratin dans le systeme) et ceci pour des raison
d'optimisation (en gros, je veux pas faire un getenv/parse a chaque
appel de fonction).


* On peut utiliser le fait que dans une unite de compilation, les
variables globales sont construites dans leur ordre d'apparition.

* On peut utiliser le fait que les variables locales statiques sont
intialisees au premier appel d'une fonction. On fait une fonction qui
retourne une reference vers cette variable locale statique.

* On peut utiliser le fait que l'initialisation des variables globales
commence par unitialisation a 0. On fait un fonction retournant une
reference vers la variable globale qui commence par tester si une variable
globale auxilliaire est nulle et dans ce cas initialise.

On peut encapsuler cela dans une classe singleton. Faire une recherche sur
ce mot cle devrait donner des exemples et d'autres variations.


En dernier recours, sur certains systemes, on peut piloter l'ordre
d'initialisation des variables statiques en affectant des priorites
aux differentes unites de compilation.
Bien entendu, c'est pas portable ni standard.


Avatar
Dominique Vaufreydaz
Bonjour,

* On peut utiliser le fait que dans une unite de compilation, les
variables globales sont construites dans leur ordre d'apparition.


Le probleme etant qu'il y a bien entendu differentes unites.

* On peut utiliser le fait que les variables locales statiques sont
intialisees au premier appel d'une fonction. On fait une fonction qui
retourne une reference vers cette variable locale statique.


Mouai, j'y ai penser aussi... Ca faisait parties des solutions
non élégantes.

* On peut utiliser le fait que l'initialisation des variables globales
commence par unitialisation a 0. On fait un fonction retournant une
reference vers la variable globale qui commence par tester si une
variable globale auxilliaire est nulle et dans ce cas initialise.


Marche pas ou pas sur les instances d'objet ! J'ai eu le probleme
sous gcc et Visual C++.
Le probleme etant que si on objet en utilise un défini dans
une autre unité, alors il l'initialise et ensuite pouf l'objet et
remis a 0 par le constructeur de celui-ci

On peut encapsuler cela dans une classe singleton. Faire une
recherche sur ce mot cle devrait donner des exemples et d'autres
variations.


Je vais voir ca, merci. Doms.

Avatar
Dominique Vaufreydaz
Bonjour,

En dernier recours, sur certains systemes, on peut piloter l'ordre
d'initialisation des variables statiques en affectant des priorites
aux differentes unites de compilation.
Bien entendu, c'est pas portable ni standard.


Les 2 sont obligatoires pour moi. Merci de l'info. Doms.