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

Singleton le retour

2 réponses
Avatar
BOUDOU Joseph
Salut,

Je reviens sur cette histoire de singleton. J'ai un paquet de
variables globales que je souhaite remplacer par des singletons afin de
simplifier les dépendances à la création d'une part et de virer le
globals.h qui empoisonne bêtement les dépendances de compilation.

Ma question est : Est-ce que le schéma suivant me garanti que
le destructeur est appelé lors d'une terminaison normale ? (Il n'y a pas
de dépendances pour la destruction).

class Machin {
public:
static Machin & instance() {
static Machin * s_instance = new Machin();
return *s_instance;
}

private:
Machin();
~Machin();
}

--
BOUDOU Joseph <jogo@matabio.net>

2 réponses

Avatar
Mickaël Wolff
On 08/01/11 15:24, BOUDOU Joseph wrote:
Ma question est : Est-ce que le schéma suivant me garanti que
le destructeur est appelé lors d'une terminaison normale ? (Il n'y a pas
de dépendances pour la destruction).

class Machin {
public:
static Machin& instance() {
static Machin * s_instance = new Machin();
return *s_instance;
}

private:
Machin();
~Machin();
}




Le destructeur ne sera jamais appelé. En compilant ce code, on se
rend bien compte que le destructeur n'est pas utilisé. Parce que s'il
était utilisé, il devrait y avoir une erreur levée par le compilateur.
Personne, en dehors de ta classe, ne peut appeler le destructeur
puisqu'il est privé.
Avatar
BOUDOU Joseph
Le destructeur ne sera jamais appelé.



Ou bien sûr, j'ai vraiment écrit n'importe quoi. Non seulement il ne
faut pas un pointeur pour ce genre de construction, mais surtout il
suffit de compiler un code de test pour avoir ma réponse.

Donc oui, le destructeur sera bien appelé avec un code comme :

class Truc {
public:
static Truc & instance() {
static Truc s_truc;
return s_truc;
};

private:
Truc();
~Truc();
}


Et désolé pour le bruit.

--
BOUDOU Joseph