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;
}
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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é.
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é.
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 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 :
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 :
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 :