Un constructeur de copie est une fonction de membre de spécial à l'intérieur d'une classe. Il accepte une référence à un objet existant du même type de classe et fait une copie complète de cet objet. Une copie en profondeur non seulement copie tous les champs de membres, mais aussi copie toute la mémoire allouée dynamiquement. Compilateurs C + + faire construction de copie automatiquement . Vous devez définir un constructeur de copie lors de votre classe implique la mémoire dynamique . Choses que vous devez
intermédiaire C + + connaissance
compilateur C + + , comme Visual Studio 2008
Show More Instructions
1
critique quand il faut appeler un constructeur de copie . Il ya trois situations : . Lors de la création d'un objet à partir d'un objet existant du même type , lorsque vous passez un objet par valeur à une fonction et quand une fonction retourne un objet
2
savoir quand votre C + + classe a besoin d'un constructeur de copie . Elle se résume à cela. Si votre classe comporte des pointeurs et il effectue allocation dynamique de mémoire , alors vous devez lui donner un constructeur de copie explicite.
3
Regardez un exemple où vous n'avez pas à définir un constructeur pour une classe C + + . Classe X a seulement empiler les variables et pas de pointeurs . Une copie superficielle est suffisante pour copier les valeurs d'un objet existant à un nouvel objet . Le compilateur peut faire cela automatiquement, donc vous n'avez pas à définir un constructeur de copie pour la classe X : class X { int num
;
publique :
X () : num (0 ) {}
~ X (); }
;
4
étude un exemple qui demande une définition constructeur de copie explicite. Comme vous pouvez le voir, la taille de la chaîne , N, n'est pas une valeur codée en dur mais est déterminée par l'utilisateur. Pour créer B de A comme dans l'expression "ZB (A), " vous devez dire au compilateur la quantité de mémoire à allouer à B. L' endroit pour ce faire est le constructeur de copie , comme suit : classe Z {
int N;
char * str ;
publique :
Z (int n) : N ( n) {
str = new char [ N] ;
}
Z ( Z et autres) {
str = new char [ other.GetLen ()] ;
//copier les données de la str de «l'autre» à la str de " cette "
}
~ Z () {
delete [] str ; }
int GetLen () const {
retour N;
} }
;