allouer les constructeurs de mémoire dynamique, les programmeurs doivent écrire votre propre constructeur de copie, si le constructeur par défaut des problèmes.
Le programmeur peut définir le constructeur de copie d'une classe. Définie par le programmeur constructeur de copie doit avoir un paramètre qui est une référence à la même classe . Exemple Prototype:
NumberArray :: NumberArray (NumberArray & obj)
{
arraySize = obj.arraySize;
unPtr = nouveau double [arraySize];
for (int index = 0, index <arraySize; index ++)
{
unPtr [index] = obj.aPtr [index];
}
}
Note: Il doit y avoir un paramètre de constructeur de copie, le paramètre est une référence à la même classe. Si vous oubliez identifiant et paramètres de référence provoquera une erreur du compilateur. En outre, le paramètre doit être une référence const, parce que le constructeur de copie ne doit pas modifier l'objet copié.
Chaque fois que des objets en passant par la valeur dans l'appel de fonction, le compilateur appellera automatiquement le constructeur de copie pour créer une copie de l'objet. Il est pour cette raison, copier les paramètres de forme du constructeur doivent être passés par référence, parce que, si elle est adoptée par la valeur lorsque le constructeur est appelé, le constructeur est appelé à nouveau immédiatement pour créer une copie du passage par valeur, ce qui conduit à le constructeur appelle la chaîne sans fin.
1. Copiez l'appel du constructeur
Chaque fois qu'un objet est créé, et en utilisant un autre objet de la même classe pour l'initialiser, le système appellera automatiquement le constructeur de copie, un exemple:
Boîte rectangulaire (5, 10);
Rectangle b = boîte; // déclaration initialisation
Rectangle b1 (encadré); // déclaration initialisation
Lors de la réception d'un appel à une fonction du paramètre de type de classe, il copiera automatiquement appel constructeur. Par exemple:
amusant vide (rect Rectangle)
{
}
En supposant que la déclaration suivante à l'appeler: fun (renard);
Cela entraînera le constructeur de copie Rectangle est appelée. Enfin, tant que la valeur de l'objet retourné par la classe de fonction appellera automatiquement le constructeur de copie. Par conséquent, la fonction suivante, lorsqu'une instruction de retour est exécuté, il appellera le constructeur de copie:
Rectangle makeRectangle ()
{
rect Rectangle (12,3);
retourner rect;
}
En effet, la déclaration de retour doit créer une copie non local temporaire de cet objet, de sorte qu'après le retour de la fonction, l'appelant peut utiliser la copie. En résumé, une classe de constructeur de copie sera appelé dans le cas suivant:
1) variable est utilisée pour initialiser un objet de la même classe.
2) la valeur de la fonction de référence est utilisé pour appeler le type de classe.
3) renvoie la valeur de l'objet est une classe.
Remarque: Lors de référence en forme de presse ou pointeur pour passer une référence de classe, constructeur copie ne sera pas appelé. En outre, lorsque la fonction retourne une référence ou pointeur vers l'objet, il ne remet pas le constructeur de copie.