Comment et quand faire des copies complètes en C ++
Les classes qui attribuent des ressources de leur constructeur devraient normalement inclure un constructeur de copie pour créer des copies de ces ressources. L'attribution d'un nouveau bloc de mémoire et copier le contenu de l'original dans ce nouveau bloc est connu comme la création d'un copie en profondeur (par opposition à la copie superficielle par défaut). Utilisez les étapes suivantes pour déterminer quand et comment faire des copies profondes en C ++:
Toujours faire une copie en profondeur si le constructeur alloue les ressources.
Par défaut, C ++ fait soi-disant copies "peu profondes" Membre par membre d'objets lors de leur passage à des fonctions ou à la suite d'une cession. Vous devez remplacer les opérateurs de copie superficielle par défaut avec leur équivalent copie en profondeur pour toute classe qui alloue des ressources dans le constructeur. La ressource la plus commune qui obtient alloué est mémoire de tas qui est renvoyée par le nouvel exploitant.
Toujours inclure un destructeur pour une classe qui alloue les ressources.
Si vous créez un constructeur qui alloue les ressources, vous devez créer un destructeur qui les restaure. Aucune exception.
Toujours déclarer le destructeur virtuel.
Une erreur débutant commune est d'oublier de déclarer votre destructeur virtuel. Le programme se déroulera bien jusqu'à un programmeur méfiance arrive et hérite de votre classe. Le programme semble toujours travailler, mais parce que le destructeur de la classe de base ne peut être invoqué correctement, des fuites de mémoire de votre programme comme une passoire jusqu'à ce qu'il se bloque finalement. Ce problème est difficile à trouver.
Toujours inclure un constructeur de copie pour une classe qui alloue les ressources.
Le constructeur de copie crée une copie correcte de l'objet courant par l'allocation de mémoire hors du tas et copier le contenu de l'objet source.
Toujours remplacer l'opérateur d'affectation pour une classe qui alloue les ressources.
Les programmeurs devraient être dissuadés de les opérateurs primordiales, mais l'opérateur d'affectation est une exception. Vous devez remplacer l'opérateur d'affectation pour toute classe qui alloue des ressources dans le constructeur.
L'opérateur d'affectation devrait faire trois choses:
Assurez-vous que l'objet de la main gauche et à droite ne sont pas le même objet. En d'autres termes, être sûr que le programmeur d'application n'a pas écrit quelque chose comme (A = A). Si elles sont, ne rien faire.
Appelez le même code que le destructeur de l'objet de la main gauche pour revenir ses ressources.
Appelez le même code comme un constructeur de copie pour faire une copie profonde de l'objet de la main droite dans l'objet de la main gauche.
Si vous ne pouvez pas faire cela, alors supprimer le constructeur de copie et de l'opérateur d'affectation de sorte que le programme ne peut pas faire des copies de votre objet.
Si vous ne pouvez même pas le faire parce que votre compilateur ne supporte pas la fonction de suppression constructeur C ++ 2011, créer un constructeur de copie et d'affectation vide et de déclarer les protégeait de garder d'autres classes de leur utilisation.
A propos Auteur
Déclarations de cession en java Un instruction d'affectation en Java utilise l'opérateur d'affectation (=) Pour affecter le résultat d'une expression à une variable. Dans sa forme la plus simple, vous codez comme ceci:variable = expression-Par example:int a = (b * c) / 4-UN…
Comment créer une classe anonyme en java Classes internes anonymes (souvent appelé simplement classes anonymes) sont probablement la caractéristique la plus étrange du langage de programmation Java. La première fois que vous voyez une classe anonyme, vous aurez presque certainement…
Comment créer des objets BigDecimal en java Pour créer un BigDecimal objet en Java, vous appelez un des constructeurs que vous voyez ci-dessous. Chacun de ces constructeurs prend une valeur et la convertit en un BigDecimal objet.Bien que vous pouvez créer BigDecimal valeurs d'une double ou…
Comment créer constructeurs en java UN constructeur est un bloc de code qui est appelé quand une instance d'un objet est créé en Java. À bien des égards, un constructeur est similaire à une méthode, mais quelques différences existent:Un constructeur ne possède pas un type de…
Comment utiliser un constructeur en java UN constructeur Java est un bloc de code semblable à une méthode qui est appelée quand une instance d'un objet est créé. Voici les principales différences entre un constructeur et une méthode:Un constructeur ne possède pas un type de…
Comment utiliser les déclarations de classe en Java Dans la programmation Java, une classe est définie par une déclaration de classe, qui est un morceau de code qui suit cette forme de base:[publique] classe ClassName {class-corps}La public mot-clé indique que cette classe est disponible pour une…
Comment utiliser les initialisateurs en java Un initialisation (parfois appelé un bloc d'initialisation) Est un bloc solitaire de coder en Java qui est placé en dehors de toute méthode, constructeur, ou un autre bloc de code. Initialiseur sont exécutées chaque fois qu'une instance d'une…
Comment utiliser la méthode de clonage pour créer une copie superficielle en java La cloner méthode en Java crée manuellement une copie de l'objet original et le renvoie. Dans de nombreux cas, cela est la meilleure façon de créer un clone. Mais que faire si votre classe a une centaine ou plusieurs champs qui doivent être…
Comment utiliser ce mots-clés et de super dans vos sous-classes java La ce mot-clé fournit un moyen de se référer à l'instance actuelle de l'objet en Java. Il est souvent utilisé pour distinguer entre une variable locale ou un paramètre et un champ de classe avec le même nom. Par example:Ball public class…
Résumé rapide de la création et l'utilisation des classes Java Développer une compréhension de la structure de classe Java vous aide à créer de meilleures catégories lorsque vous programmez des applications Java. Voici les principaux points à retenir sur la création et l'utilisation des classes en…
Les types de référence en java UN Type de référence est un type de données qui est basé sur une classe plutôt que sur l'un des types primitifs qui sont intégrées dans le langage Java. La classe peut être une classe qui est fournie dans le cadre de la bibliothèque de…
Comment créer des objets en javascript javascript a un type de données appelé objet. javascript objets encapsuler les données et les fonctionnalités des composants réutilisables. Vous trouverez peut-être que la création d'un objet est la prochaine étape logique dans…
Comment construire un objet en PHP avec la programmation orientée objet Les mécanismes de PHP pour programmation orientée objet (POO) sont importantes pour apprendre parce que la plupart des bibliothèques avancées que vous êtes susceptibles d'utiliser sont orienté objet, et parce que correctement mis en œuvre POO…
Comment créer un constructeur en python UN constructeur est un type spécial de la méthode que Python appelle quand il instancie un objet en utilisant les définitions trouvées dans votre classe. Python repose sur le constructeur pour effectuer des tâches telles que initialisation…