Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1389 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Constructeur de copie

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Constructeur de copie

n°428764
grosmethos
Posté le 16-06-2003 à 09:54:38  profilanswer
 

voici le code que me tracasse :

Code :
  1. //constructeur de copie
  2. Tableau::Tableau(const Tableau &int):taille(int.taille)
  3. {
  4. ptr=new int[taille];
  5. assert(ptr!=0);
  6. ++compteTableau;
  7. for (int i=0;i<taille;i++)
  8. ptr[i]=init.ptr[i];
  9. }


 
Or ptr est une donnée membres (un pointeur), donc ptr[i]=int.prt[i] va modifier mon pointeur...
Je vois pas ou est la copie en fait..vu que j'ecrase le contenu du prt??

mood
Publicité
Posté le 16-06-2003 à 09:54:38  profilanswer
 

n°428782
chrisbk
-
Posté le 16-06-2003 à 10:07:21  profilanswer
 

Citation :

Or ptr est une donnée membres (un pointeur), donc ptr[i]=int.prt[i] va modifier mon


 
Non vu que tu ne modifie pas le pointeur mais les données pointées par ce pointeur

n°428792
grosmethos
Posté le 16-06-2003 à 10:12:22  profilanswer
 

oui excuse je modifie la donnée pointée mais donc aucune copie..j'ai pas deux donnée contenant la meme chose...
c'est ça que je comprend pas....
 :sweat:

n°428844
bjone
Insert booze to continue
Posté le 16-06-2003 à 11:03:28  profilanswer
 

bin si.
 
le ptr=new int (taille);
 
crée le nouveau tableau...
 
puis le for copie les données...

n°428857
BifaceMcLe​OD
The HighGlandeur
Posté le 16-06-2003 à 11:13:09  profilanswer
 

C'est une copie légère que tu fais (shallow copy en anglais), pas une copie profonde (deep copy).
 
Tu dupliques le tableau, mais pas le contenu du tableau. Le tableau et sa copie pointeront sur les mêmes objets.
 
Petite nuance : ceci est vrai dans l'absolu, et c'est vrai à tous les coups en Java. En C++, cela dépend de ce que contient le tableau. S'il contient des pointeurs ou des références, ce sera le cas. S'il contient des atomiques ou des objets, alors l'affectation "ptr[i ]=init.ptr[i ];" fera elle-même une duplication implicite du i-ème élément du tableau et la copie sera quand même profonde.


Message édité par BifaceMcLeOD le 16-06-2003 à 11:14:53
n°428955
bjone
Insert booze to continue
Posté le 16-06-2003 à 11:50:55  profilanswer
 

grosmethos >> tu pourrais pas renommer le nom du tableau passé en paramètres ? passke int comme nom de variable, c'est super limpide pour le reste du code...

n°428959
chrisbk
-
Posté le 16-06-2003 à 11:51:37  profilanswer
 

BJOne a écrit :

grosmethos >> tu pourrais pas renommer le nom du tableau passé en paramètres ? passke int comme nom de variable, c'est super limpide pour le reste du code...


 
nan il a du merder dans la recopie du code, regarde la suite, c'est init le nom de sa variable :D (sinon de toute facon ca compilerait pas :O)

n°428963
bjone
Insert booze to continue
Posté le 16-06-2003 à 11:53:35  profilanswer
 

ce serait pas plustôt ça que tu devrais avoir:  :??:  
 

Code :
  1. Tableau::Tableau(const Tableau &init):taille(init.taille)
  2.   {
  3.     ptr=new int[taille];
  4.     assert(ptr!=0);
  5.     ++compteTableau;
  6.     for (int i=0;i<taille;i++)
  7.     ptr[i]=init.ptr[i];
  8.   }


 
EDIT: joceeeeeeeeeeeeeeeeeee la balise de changement de couleur chie dans le [cpp][/cpp]


Message édité par bjone le 16-06-2003 à 11:54:46
n°428965
bjone
Insert booze to continue
Posté le 16-06-2003 à 11:53:55  profilanswer
 

chrisbk a écrit :


 
nan il a du merder dans la recopie du code, regarde la suite, c'est init le nom de sa variable :D (sinon de toute facon ca compilerait pas :O)


 
+1
 
on est d'accord, donc en principe y'a bien l'allocation du nouveau tableau, et la recopie.


Message édité par bjone le 16-06-2003 à 11:55:33
n°429081
Taz
bisounours-codeur
Posté le 16-06-2003 à 12:50:33  profilanswer
 

terriblement efficace le assert, aucune utilité puisque bad_alloc est lancé
 
moi je préfère
 

Code :
  1. Tableau::Tableau(const Tableau &init)
  2. : taille(init.taille), ptr(new int[taille])
  3.     {
  4.         ++compteTableau;
  5.         std::copy(init.ptr, init.ptr+taille, ptr);
  6.     }


réutilisation maximum, meilleure protection contre les exceptions


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Constructeur de copie

 

Sujets relatifs
[DOMINO] Créer une copie de la vue Discussion Threadscopie de form de façon dynamique
C++ constructeur et heritage ...Copie de cellules avec [vb/excel]
Passage d'arguments par défaut dans constructeurCopie de CString vers LPSTR...
comment on copie une table dans une autre en Mysqlproblème de constructeur class & cie
philosophie constructeur par recopie / cloneconstructeur de copie de base
Plus de sujets relatifs à : Constructeur de copie


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR