privé destructeur de classe singleton
Est-il obligatoire d'avoir un privé destructeur pour une classe singleton.
Non, il n'est pas. Pourquoi ne demandez-vous? Qui vous contraignent à vous? Et en posant des questions qui ont une réponse oui/non n'est pas une bonne idée.
Au moins ces questions ne peuvent pas être fermé pour être argumentatif.
est du bidon, je suis bon?" 😉
quelqu'un utiliser le C++ plus?"
La bonne réponse doit être oui/non. Pas de place pour les arguments. Suis-je le droit?
Au moins ces questions ne peuvent pas être fermé pour être argumentatif.
:)
est du bidon, je suis bon?" 😉
quelqu'un utiliser le C++ plus?"
La bonne réponse doit être oui/non. Pas de place pour les arguments. Suis-je le droit?
:)
OriginalL'auteur KhanS | 2010-04-01
Vous devez vous connecter pour publier un commentaire.
Cela pourrait ne pas être ce que vous cherchez.. Mais pour la référence, je l'utilise comme suit:
Puis à la fin de mon programme, je l'appelle de détruire l'objet. Comme Péter points le système va récupérer de la mémoire lors de la fin de votre programme, donc il n'y a pas de véritable raison. La raison que j'utilise un de les détruire, c'est quand Ogre plaint que je n'avais pas publié tous les souvenirs que j'ai alloué. Après que je viens de l'utiliser comme une "bonne manière", car j'aime le nettoyage après moi-même.
destroy
, vous aussi vous fournir une abstraction qui fuit. Vous devez rechercher des Alexandrescu "Modern C++ Design" et de prendre de l'inspiration dansLoki::Singleton
.Vous pourriez enregistrer les détruire avec atexit.
Ce que je peux obtenir à partir de books.google.com c'est que lors de la destruction du singleton, je doit l'enlever à l'application de l'arrêt. Mais je suis curieux de savoir ce que tu veux dire par la fuite de l'abstraction. Dois-je créer une nouvelle question peut-être..? 🙂 Encore faudrait-il être qui fuit si je le fais comme Michael Aaron le suggère?
Le problème, c'est que vous êtes en ouvrant le code à une fuite.L'utilisateur de la singelton doivent savoir qu'ils ont besoin d'utiliser le détruire, puis insérez le code au bon endroit. Contrairement à Java, C++ permet un bon développeur pour prendre la responsabilité de la conception de la classe de sorte qu'il est difficile d'abus (une caractéristique de la RAII). En tant que développeur, vous devriez essayer de prendre ce manteau, et essayer de construire une singelton qui ne nécessite pas l'utilisateur à comprendre la mise en œuvre de l'utiliser correctement. Exigeant explicite de détruire est de donner à l'utilisateur la possibilité d'abus de la classe (par pas de l'appeler).
Si vous pour les détruire avant la fin du code, (c'est à dire exit() juste ne pas le couper) puis à l'aide d'un singleton n'est pas ce que vous voulez. Probablement.
OriginalL'auteur Default
Si le singleton est mis en œuvre comme une variable au niveau global, il doit avoir un public destructeur. Seuls les membres publics sont accessibles à portée globale.
Si elle est déclarée en tant que membre statique ou statique locale au sein de sa propre classe, puis le destructeur peut être privé. Le destructeur est appelé à partir de l'intérieur de portée de classe, où il est accessible, lorsque le programme se termine. C'est une manière d'appliquer l'objet d'un singleton. Avez-vous besoin d'fortement de la faire respecter? Si oui, oui. Cela dépend de ce que tu veux dire par "obligatoire."
static
est l'un de la manière la plus commode. Qu'est-ce que l'effet de l'appelgetGlobalA
aprèsa2
a été détruite lors de la destruction de variables globales) ? Je crains que cela conduirait à UB.m: Voir cet article pour une technique simple pour pallier à ce problème: stackoverflow.com/questions/335369/...
OriginalL'auteur Potatoswatter
Toutes les classes ont un destructeur. Si vous ne créez pas un le compilateur va le faire pour vous. Donc, votre question peut être reformulée ainsi: le destructeur pour une classe singleton ont privé?
La réponse simple est non, il n'a pas à être.
Une question plus intéressante: Est-ce une bonne idée de faire le destructeur d'une classe singleton privé?
Oui, en général, c'est une bonne idée. Si vous faites en privé, puis votre code client ne vais pas l'appeler le destructeur par accident. Appeler le destructeur serait la cause de la singleton à l'échec pour tous les clients comme l'instance qui allait devenir invalide.
il peut:
GetSingleton()->~CSingleton()
mais qui dans leur bon esprit ne ferait une telle chose? À mon humble avis, tout le code qui appelle un destructeur de façon explicite et n'est pas en utilisant le placement de nouvelles est hautement suspect.
ou moins pervers:
p = GetSingleton()
, et/* Momma told me to always delete my pointers:*/ delete p;
Mais un Singleton getter retour d'un pointeur est tout simplement un cas de mauvaise conception de l'interface. (Qui est, sauf si vous êtes dans un environnement où un nu-muets pointeur signifie "ne vous inquiétez pas à propos de l'effacement", parce que tout ce qui mérite le plus inquiétant est gérée par des pointeurs intelligents.) Je m'attends à un Singleton getter pour moi une référence.
OriginalL'auteur Mark Byers
À mon avis, le destructeur d'une signleton doit être privé. Sinon somewone est en mesure d'appeler "supprimer" pour votre instance du singleton. Je sais, normalement, personne ne le fera. Mais si nous parlons de l'excellence de la conception, il doit être résistant à tous les possibles prévu ou unitnended dommages.
Avec le C++ moderne, il est permis de déclarer, même privé destructeurs pour la statique des objets construits.
Voici mon extrait de code pour Singleton:
OriginalL'auteur Vadim Sukhorukov
Pas, et, en général, des objets en C++ ne sont pas donnés privé destructeurs. Gardez à l'esprit que Singleton signifie qu'il n'est qu'un exemple, et il en est de la construction, de la destruction, qui doit être contrôlé en ont empêché. Habituellement, un singleton est un constructeur privé, public destructeur, d'une salle de statique de la variable d'instance, et un public static singleton obtenir /paresseux fonction de construction, bien qu'il existe des variations sur ce modèle.
OriginalL'auteur Michael Aaron Safyan
Vous pouvez retourner référence à votre instance du singleton.
static_cast
est inutile (vous pouvez convertir implicitement à partir de dérivés à la base), il n'est pas trop mauvais. Il y a des problèmes avec l'accès, après la destruction, vous devez essayer de comprendre.Je ne vois aucune nécessité pour la création dynamique. Il suffit de créer une fonction statique de la variable et vous aurez les mêmes fonctionnalités. Avec l'avantage que vous pouvez contrôler (à un degré) lorsqu'il est détruit, de sorte que vous n'avez pas accès une fois qu'il est détruit.
oui vous avez raison, mais c'est juste un exemple pour l'initialisation tardive.
Comme c'est à l'aide d'une fonction statique de la variable.
OriginalL'auteur baris.aydinoz