|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||||||||
|
Invité régulier
![]() Inscription : juin 2010 Messages : 33 ![]() |
Bonjour a tous,
Je suis en train de coder un tableaux qui stocke des objet de classeD, a chaque ajout ce tableau s'elargit et stocke mon nouvel élément dans une nouvelle case. Mais avant d'arriver a ce stade, je souhaite comprendre le comportement qui se produit actuellement dans mon programme (je fais ici un test avec un tableaux définis de base comportant une ligne et une colonne). Voici mes fichiers : classD.hpp Code :
Code :
Code :
Code :
main.cpp Code :
Citation:
Merci d'avance pour votre aide. |
|||||||||||
|
|
00
|
|
|
#2 | ||
![]() ![]() Cyrille Network programmer Inscription : juin 2010 Messages : 1 542 ![]() |
Bonjour,
le code Code :
- créer aClassD - créer _colonnes classD et faire autant d'appel au constructeur par défaut - utiliser l'opérateur d'affection sur _tab2D[0][0] avec aClassD comme paramètre - aClassD sera supprimé à la fin de la fonction --> c'est une copie de aClassD qui a été affecté et survit dans le tableau |
||
|
|
00
|
|
|
#3 | ||||
|
Membre éprouvé
![]() Étudiant Inscription : juin 2012 Messages : 263 ![]() |
Tu devrais utiliser des vector au lieu de gérer toi même ton tableau.
Sinon, Code :
Code :
Met un cout dans le constructeur par copie de classD ça apparaîtra plus clairement. edit: correction de ma confusion entre operator= et construction par copie |
||||
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() jonathan poelenÉtudiant Inscription : juin 2011 Messages : 6 ![]() |
Salut,
lorsque que tu crées le tableau avec new, il y a autant de classD créer que de cellule dans le tableau, ici 1. Ensuite tu modifies la valeur de la première cellule en créant une nouvelle classD, ce qui fait 2 construction. Sinon il y a plein de copie d'objet, notamment les std::string qui ne sont pas passés par référence constante. Il en va de même pour le prototype de retournerCase qui gagnerait à retourner une référence constante Code :
const classD& retournerCase(const int colonne , const int ligne = 0 )const; |
|
|
00
|
|
|
#5 | |
|
Invité régulier
![]() Inscription : juin 2010 Messages : 33 ![]() |
Merci pour votre réponse je comprend mieux maintenant ce qui se passe dans le premier cas.
Par contre je ne comprend toujours pourquoi il y a une double destruction de l'objet D "Mon premier objetTab1 ". Citation:
|
|
|
|
00
|
|
|
#6 |
|
Membre éprouvé
![]() Étudiant Inscription : juin 2012 Messages : 263 ![]() |
retournerCase te retourne une copie de l'objet (que tu stockes dans plop)
Quand main retourne, plop et monTabT sont supprimés (monTabT détruit l'objet classD qu'il contient) -> 2 appels au destructeur. |
|
|
00
|
|
|
#7 |
![]() ![]() Loïc JolyDéveloppeur informatique Inscription : août 2004 Messages : 4 673 ![]() |
Dans ce genre de code de test, ne jamais oublier d'instrumenter aussi le constructeur de copie...
__________________
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11. |
|
|
10
|
|
|
#8 |
|
Invité régulier
![]() Inscription : juin 2010 Messages : 33 ![]() |
Merci pour votre aide, je vais regarder plus en détail mon constructeur de copie.
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com