garslouche
Messages postés583Date d'inscriptionmardi 26 novembre 2002StatutMembreDernière intervention29 mai 2015
-
11 août 2005 à 16:34
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 2006
-
11 août 2005 à 18:21
Bonjour à tous.
J'ai quelques questions existentielles sur le C++....
1)
Si j'ai une structure par exemple:
struct
Structure
{
float tableau[20];
};
et une fonction, par exemple :
Structure MaClasse::create( ) const
{
Structure resultat;
// plein de traitements qui remplissent la structure
return resultat;
}
Que va me renvoyer la fonction create() ? Une copie de resultat, ok... mais resultat.tableau ? Les 20 éléments vont être recopiés ?
2)
D'autre part quelle différence y a-t-il entre
Structure MaClasse::create( ) const
et
Structure& MaClasse::create( ) const
?
3)
Enfin dans la fonction create() la copie de resultat est créée avec le constructeur de copie ou avec l'opérateur = ?
Merci
On ne force pas une curiosité, on l'éveille. .................................................Daniel Pennac
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 11 août 2005 à 16:50
dans ta Create() la struct est déclaré ici donc mise sur pile le temps de la fonction. Tu es bien cetain que tu obtiens une copie ? et placée où dans ce cas ?
garslouche
Messages postés583Date d'inscriptionmardi 26 novembre 2002StatutMembreDernière intervention29 mai 20151 11 août 2005 à 16:55
C'est une copie, pas de doute...
C'est géré exactement comme si c'était un type simple (un int par exemple).
Ce que tu dis pourrait poser problème si la fonction renvoyait un pointeur sur resultat. Car alors le pointeur renvoyé pointerait sur un objet détruit (et donc potentiellement écrasé par une autre allocation).
On ne force pas une curiosité, on l'éveille. .................................................Daniel Pennac
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 20081 11 août 2005 à 17:00
Ta structure est effacee quand tu quittes la fonction ou elle a ete creee.
Tu peux quand meme la retrouver en utilisant resultat si la pile n`a pas bouge.
Tu aurais plus de chance de retrouver les 20 float en renvoyant l`adresse de la structure.
La RAM a l`endroit de tes 20 float a peu d`etre remplacee aussitot create terminee.
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009 11 août 2005 à 17:12
Les "structures" du C sont remplacées par les "pod" en C++. Je vous invite à lire ceci concernant les POD (Plain Old Data). Il y a un certain nombre de réponses.
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009 11 août 2005 à 17:17
1) copie des éléments
2) Sans &, copie défensive. Avec &, retourne une référence sur la variable resultat... qui est détruite dans ce cas précis. Donc ne pas utiliser dans ce cas !
3) copie par memcpy() bien sur.
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 20065 11 août 2005 à 18:09
1) oui et oui (l'objet est copié)
3) constructeur par copie
Si tu ne définie pas le constructeur par copie et l'opérateur d'affectation ils seront ggénéré par défaut par le compilateur, dans ton cas tu n'as pas besoin de les définir.
xterminhate > ce n'est pas necessaire dans sont cas.