Singleton le retour

Le
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>
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Mickaël Wolff
Le #23001791
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é.
BOUDOU Joseph
Le #23004421
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
Publicité
Poster une réponse
Anonyme