Dans le livre de « Le langage C++ », l'auteur a affirméinitialisation objet
Parfois, lorsque vous concevez une bibliothèque, il est nécessaire, ou tout simplement pratique, d'inventer un type avec un constructeur et un destructeur dans le seul but de l'initialisation et du nettoyage. Un tel type ne serait utilisé qu'une seule fois: pour allouer un objet statique de sorte que le constructeur et le destructeur soient appelés.
Je suis intéressé par le type de scénario auquel cette déclaration fait référence? Ou comment cette déclaration aide la conception du logiciel?
Le livre donne également un exemple
class Zlib_init{
Zlib_init();
~Zlib_init();
};
class Zlib{
static Zlib_init x;
}
Et le livre affirme que
Malheureusement, il n'est pas garanti qu'un tel objet est initialisé avant sa première utilisation et détruit après sa dernière utilisation dans un programme constitué d'unités compilées séparément.
Pourquoi cela peut-il se produire?
Merci pour votre clarification.
Vous avez la garantie qu'un tel objet sera créé avant que Main ne soit appelée et détruite après les retours principaux. En tant que tel, vous pourriez être tenté de dire "mais, mais ... tout est bon". Malheureusement, vous pourriez avoir un objet statique différent quelque part dans votre programme qui utilise aussi l'objet Zlib_init, et le langage C++ ne garantit pas que celui-ci sera créé ou détruit avant ou après cet objet ou tout autre objet, dès qu'ils sont dans différentes unités de compilation. Donc, le libellé est peut-être un peu pédant, mais c'est 100% correct. (Bon, c'est correct quand même, puisque c'est Stroustrup). – Damon