Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : C++ : Copie d'une structure [ Archives / Divers ] (garslouche)

jeudi 11 août 2005 à 16:34:46 | C++ : Copie d'une structure

garslouche

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

jeudi 11 août 2005 à 16:50:37 | Re : C++ : Copie d'une structure

BruNews

Administrateur CodeS-SourceS
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 ?

ciao...
BruNews, MVP VC++

jeudi 11 août 2005 à 16:55:20 | Re : C++ : Copie d'une structure

garslouche

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

jeudi 11 août 2005 à 17:00:09 | Re : C++ : Copie d'une structure

Galmiza

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.

La copie s`effectue sans doute par memcpy.


jeudi 11 août 2005 à 17:12:44 | Re : C++ : Copie d'une structure

xterminhate

Membre Club
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. http://www.fnal.gov/docs/working-groups/fpcltf/Pkg/ISOcxx/doc/POD.html

jeudi 11 août 2005 à 17:17:24 | Re : C++ : Copie d'une structure

xterminhate

Membre Club
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.

jeudi 11 août 2005 à 17:25:08 | Re : C++ : Copie d'une structure

garslouche

Je faisais effectivement référence aux struct C++ c'est-à-dire des classes dont les méthodes et attributs sont public par défaut.

Pour la question 2), dans quel cas faudrait-il utiliser & alors ? Peux-tu me donner une exemple ?

Pour la question 3), ça m'étonne car alors il est impossible de surcharger la copie... Es-tu certain de ta réponse ?


On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac

jeudi 11 août 2005 à 17:37:32 | Re : C++ : Copie d'une structure

xterminhate

Membre Club
Un exemple "à la con" : int & incr( int & n ) { return ++n; }; Cela évite des copies inutiles. Tu as lu la page dont je t'ai donné le lien ?

jeudi 11 août 2005 à 17:42:16 | Re : C++ : Copie d'une structure

xterminhate

Membre Club
Ajoute un constructeur par recopie ou/et un operateur d'affectation à ton POD, et il devient un objet classique.

jeudi 11 août 2005 à 18:09:49 | Re : C++ : Copie d'une structure

steve_clamage

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.


1 2

Cette discussion est classé dans : fonction, copie, resultat, structure, create


Répondre à ce message

Sujets en rapport avec ce message

structure [ par valoide ] sous visual c++, je voudrais que ma fonction renvoie un type structure afin de l'exploiter dans d'autres fonction???help Remplacer la fonction de copie de fichier sous Windows [ par MangaII ] Salut !Quelqu'un sorai-t-il comment on pe remplacer la fonction de copie de fichier sous Windows par un programme maison !Mon but est d'optimiser la c fonction create() et DoModal() [ par valery13 ] Bonjour à tous,je suis un gros débutant en C++( sous visual c++ 6.0)j'ai créé une fenetre dialogue modal et je voudrais quelle soit non modal. Il faut Tableau de structure [ par tomsawyerbelgique ] Bonjour suriez-vous me dire comment fait-on pour passer un tableau de structure dans une fonction:struct student { char nom[10]; int nbcot structure [ par airwann ] bonjour,une structure peut elle contenir un tableau de stucture 3D dynamique ?si oui comment écrire cette fonction ? j aimerais que cette fonction poi passage de tableau de structure en parametre [ par dardarmotus ] dardarmotus Bonjour a tous les developpeurs,Voila j'ai un petit programme qui va chercher des données dans des fichiers texte.(jusque la pas de pbm) C pb création de thread Linux [ par valoue ] Bonjour tout le monde !Je travaille sous Linus, et je veux créer un thread.Pour cela, j'utilise la fonction 'pthred_create' qui indique, en même tps a DLL et variables [ par CyberP ] Voilà je voudrais donner la possibilitée à une dll d'appeler une fonction de l'application mèreDonc j'ai créé une structure que j'appelle PLUGINSYNC ( Help, DevC++ fonction retournant un float, résultat très étrange... [ par yom007 ] Bonjour,   je travaille sous devC++ et là c'est l'incompréhension, peut-etre qu'une ame charitable pourra venir à mon secours...J'ai reussi à isoler m Thread paramètre [ par nicompx ] Salut, Je démarre plusieurs thread qui exécute une fonction. Cette fonction reçoit en paramètre une structure. Si je passe l'adresse de la structure e


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.