IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Pointeur et reference


Sujet :

C++

  1. #1
    Membre chevronné Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    mars 2009
    Messages
    1 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : mars 2009
    Messages : 1 021
    Points : 2 053
    Points
    2 053
    Par défaut Pointeur et reference
    Bonjour,

    Je voudrais en fait avoir des informations.

    Je possède une classe "Ressource".
    Cette classe a pour but de "distribuer" des sprite, son (etc).
    Je créer une instance de Ressource dans le main.
    Puis, d'autre classe (Personnage, arme ... ) vont avoir besoin de sprite et de son.
    Donc dans leurs constructeur, je passe par paramètre mon instance de "Ressource".

    Voici le contexte, et maintenant les questions :

    1) J'ai lu (je ne sais plus ou) qu'il fallait éviter de passer dans les paramètre d'une fonction des variable (ou structure/classe) trop lourde car la copie devient longue.
    Est-ce que la copie d'une "Grosse" instance ralentirai significativement le programme ?
    Selon vous, quelle taille donner par sizeof serait le maximum ?

    2) afin de remédier a ce "probleme", j'ai décider de créer un pointeur et de le passer en paramètre.
    avec sizeof, j'obtiens 4 alors que mon instance pèse 62664.

    Étant donné que je m'initie au C++, j'ai lu qu'il existait les référence.
    J'ai aussi lu qu'il fallait préférer les référence au pointeur.
    Mon probleme est que sizeof de ma référence me donne 62664 aussi.

    Est ce que je me suis tromper ? Une référence prend t'elle autant de place que la variable référencé ?

    Si elle prend autant de place, y a-t'il une autre solution que les pointeur afin de ne pas ralentir le programme lors d'un appel a fonction ?


    J'espère avoir été clair, Merci de votre lecture.

  2. #2
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 1 909
    Points : 3 175
    Points
    3 175
    Par défaut
    un petit tour dans la faq et je pense que tu auras tes réponses :

    http://cpp.developpez.com/faq/cpp/in...TION_reference
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  3. #3
    Membre chevronné Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    mars 2009
    Messages
    1 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : mars 2009
    Messages : 1 021
    Points : 2 053
    Points
    2 053
    Par défaut
    Aie, j'oublie toujours la FAQ.

    Cependant, la FAQ ne répond pas du tout a mes probleme (a moins que j'ai mal lu).

  4. #4
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 1 909
    Points : 3 175
    Points
    3 175
    Par défaut
    la FAQ c peux venir la completer aussi , surtout pour ce qui concerne les pointeurs
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  5. #5
    Membre chevronné Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    mars 2009
    Messages
    1 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : mars 2009
    Messages : 1 021
    Points : 2 053
    Points
    2 053
    Par défaut
    Merci du lien, mais celui ci ne répond a aucune de mes question.

    Je voudrais savoir s'il est normal qu'une reference "pese" le meme nombre d'octet.

    Je voudrais savoir s'il existe une methode autre que les pointeur pour "alleger" les parametre d'une fonction.

  6. #6
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : juin 2009
    Messages : 1 909
    Points : 3 175
    Points
    3 175
    Par défaut
    fais attention quand tu mesure la taille de mesurer la bonne

    tu mesure peu être la taille de l'objet référencé et pas celle de la référence sur l'objet.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    25 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 25 852
    Points : 205 047
    Points
    205 047
    Billets dans le blog
    83
    Par défaut
    Bonjour,

    Il faut juste noté, que la taille d'un pointeur fait toujours 4 ( enfin, dans la configuration classique de nos ordinateurs ).
    Donc exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char c;
    char* pc = &c;
    sizeof (c); // - > 1
    sizeof (pc); // -> 4
    Le coup de la référence, c'est que ça copie l'objet ... donc ça garde la même taillle que l'objet
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    mars 2004
    Messages
    10 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : mars 2004
    Messages : 10 031
    Points : 13 671
    Points
    13 671
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Le coup de la référence, c'est que ça copie l'objet ... donc ça garde la même taillle que l'objet
    non.c'est de la référence d'objet. C'est pas pareil. En gros faut voir cela comme un alias ou un link. Donc ton sizeof sur une référence reviens à faire un sizeof sur l'objet référencé.

    Par principe, char,int, double, en compagnie, tu le passe par copie. Le pointeur ou la référence n'apporte rien de plus. Pour des structure/classe plutôt des const référence. Si ta méthode doit modifier l'objet, alors une référence.

  9. #9
    Membre émérite Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 154
    Points : 2 759
    Points
    2 759
    Par défaut
    A savoir qu'une référence est comme une constante elle doit être initialisée à la création, contrairement au pointeur qu'on peut mettre à zéro puis initialiser plus tard.

    Elle doit donc être initialisée comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class UneClasse
    {
    	AutreClasse& _autreClasse;
    
    public:
    	UneClasse(AutreClasse& autreClasse) : _autreClasse(autreClasse)
    	{ ... }
    };
    Le texte en rouge doit être mis dans le .cpp plutôt que le .h bien sûr.

    L'avantage c'est qu'on obligé de donner un objet AutreClasse dans le constructeur de UneClasse, alors qu'avec un pointeur on peut très bien te donner une valeur erronée.

  10. #10
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : octobre 2006
    Messages : 1 327
    Points : 1 446
    Points
    1 446
    Par défaut
    Et pour information, une référence n'est qu'un pointeur déguisé, et donc prend exactement la même place qu'un pointeur

  11. #11
    Membre chevronné Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    mars 2009
    Messages
    1 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : mars 2009
    Messages : 1 021
    Points : 2 053
    Points
    2 053
    Par défaut
    Ouf, ca y est !

    Merci coyotte !

    J'ai enfin la réponse clairement dite.

    Merci a tout les autres pour leur participation, ca m'a beaucoup appris !

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    mars 2004
    Messages
    10 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : mars 2004
    Messages : 10 031
    Points : 13 671
    Points
    13 671
    Par défaut
    Citation Envoyé par coyotte507 Voir le message
    Et pour information, une référence n'est qu'un pointeur déguisé, et donc prend exactement la même place qu'un pointeur
    je suis pas sur qu'il fasse toujours la taille d'un pointeur et que c'est le compilot qui décide ce qu'il fait. Il peut très bien juste remplacer la référence par le référencé dans la compilation.

  13. #13
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : octobre 2006
    Messages : 1 327
    Points : 1 446
    Points
    1 446
    Par défaut
    Oui c'est vrai, une référence ne changeant pas d'objet pointé on peut faire cette optimisation dans certains cas.

    Quoi qu'il en soit, ce ne sera jamais plus lourd pour le programme qu'un pointeur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pointeurs et reference : besoin de precisions
    Par gangsoleil dans le forum Débuter
    Réponses: 10
    Dernier message: 25/07/2012, 14h45
  2. Différence entre Pointeurs et References
    Par Le Pharaon dans le forum C++
    Réponses: 43
    Dernier message: 17/10/2011, 13h47
  3. Passage de tableau de pointeur par reference
    Par dahtah dans le forum Débuter
    Réponses: 7
    Dernier message: 25/08/2011, 17h13
  4. pointeur et reference
    Par hostyle dans le forum C++
    Réponses: 16
    Dernier message: 08/10/2010, 23h36
  5. Réponses: 3
    Dernier message: 06/07/2007, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo