184 votes

Ce qui est l’utilisation de having destructeur comme privé ?

Ce qui est l’utilisation de having destructeur comme privé ?

170voto

Paul Tomblin Points 83687

En gros, tout le temps de vous en voulez d'autres de la classe à être responsable pour le cycle de vie de votre classe d'objets, ou vous avez une raison pour empêcher la destruction d'un objet, vous pouvez faire le destructeur privé.

Par exemple, si vous êtes en train de faire une sorte de comptage de référence, on peut avoir l'objet (ou le gestionnaire qui a été "ami"ed) chargés de compter le nombre de références à lui-même et de le supprimer lorsque le nombre atteint zéro. Un privé dtor empêcherait quelqu'un d'autre de le supprimer quand il y avait encore des références.

Pour un autre exemple, que faire si vous avez un objet qui a un manager (ou lui-même) qui peut détruire ou peut refuser de le détruire, selon les autres conditions du programme, tels qu'une connexion de base de données puisse être ouverte ou un fichier en cours d'écriture. Vous pourriez avoir un "request_delete" de la méthode dans la classe ou le gestionnaire, vérification de cette condition et de supprimer ou de ou de la refuser, et de retour à un état de vous dire ce qu'il a fait. Ce qui est bien plus souple que tout le qualifiant de "supprimer".

68voto

dirkgently Points 56879

Un tel objet ne peut jamais être créé sur la pile. Toujours sur le tas. Et suppression doit être effectuée via un ami ou un membre. Un produit peut utiliser une hiérarchie d’objet unique et un gestionnaire de mémoire personnalisé--ce genre de scénario peut utiliser un dtor privé.

44voto

Michael Points 34110

Lorsque vous ne voulez pas aux utilisateurs d’accéder le destructeur, par exemple, vous souhaitez que l’objet seulement soient détruits par d’autres moyens.

http://blogs.msdn.com/larryosterman/Archive/2005/07/01/434684.aspx donne un exemple, où l’objet est compté et devraient seulement être détruits par l’objet lui-même lorsque le compte passe à zéro.

16voto

Vinay Points 3310

COM utilise cette stratégie pour la suppression de l’instance. COM fait le destructeur privé et fournit une interface pour la suppression de l’instance.

Voici un exemple de quoi aurait l’air une méthode de libération.

Les objets ATL COM sont un excellent exemple de ce modèle.

6voto

FigBug Points 5052

La classe seulement peut être supprimée que par lui-même. Utile si vous créez quelques try de référence compté objet. Alors seulement la méthode release peut supprimer l’objet, peut-être vous aider à éviter les erreurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X