2010-07-19 5 views
0

Possible en double:
Why should the copy constructor accept its parameter by reference in C++?C++ Programmation Copier Constructor

Salut experts,

Pouvez-vous s'il vous plaît dire ce qui se passe si je din't donner référence d'un objet en copie constructeur.

Merci à l'avance fou

+1

Veuillez donner un exemple de code de ce que vous voulez dire –

+0

Dupliquer: http://stackoverflow.com/questions/2685854/why-should-the-copy-constructor-accept-its-parameter-by-reference-in-c Il veut dire pourquoi le paramètre est une référence. La réponse est bien sûr que si l'argument était en valeur, il devrait être copié. Pour ce faire, vous utilisez un constructeur de copie. Donc, vous devez faire une copie, et ainsi de suite, ad infinitum. – GManNickG

+0

Bah! J'aurais dû savoir que cela avait déjà été demandé. –

Répondre

4

La bonne réponse est que vous ne l'avez pas écrit un constructeur de copie:

Un constructeur non-modèle pour la classe X est un constructeur de copie si son premier paramètre est soit X&, const X&, volatile X& ou const volatile X&, et soit il n'y a pas d'autres paramètres, soit tous les autres paramètres ont des arguments par défaut (C++ 03 §12.8/2). Pourquoi l'argument du constructeur de la copie ne peut-il pas être pris en compte par la valeur?

Le constructeur de copie est appelé pour faire des copies des objets de la classe. Une copie doit être faite pour passer un objet par valeur. Si le constructeur de copie pouvait prendre un objet par valeur, vous obtiendriez une récursion infinie en essayant de l'invoquer.

2

Ce serait un appel récursif au constructeur de la copie, car le constructeur de la copie sera appelé pour créer une copie de l'objet qui lui est passé.