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 :

stack : r�f�rence


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par d�faut stack : r�f�rence
    Bonjour,

    Si j'ai ceci : std::stack<A> truc;

    A chaque fois que je vais faire un push, est-ce que le constructeur de copie de "A" sera appel� ?

    Pourquoi ne puis-je pas faire ceci : std::stack<const A &> truc; ? (j'ai plein d'erreur � la compilation quand je fait �a)

    Merci d'avance...

  2. #2
    Membre chevronn�
    Profil pro
    Inscrit en
    F�vrier 2008
    Messages
    439
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 439
    Par d�faut
    Citation Envoy� par casafa Voir le message
    Si j'ai ceci : std::stack<A> truc;

    A chaque fois que je vais faire un push, est-ce que le constructeur de copie de "A" sera appel� ?
    En attendant les r�f�rences de r-valeur de la prochaine norme C++, oui.

    Citation Envoy� par casafa Voir le message
    Pourquoi ne puis-je pas faire ceci : std::stack<const A &> truc; ? (j'ai plein d'erreur � la compilation quand je fait �a)
    Il faut un type d'objet pour instancier un conteneur!

    D'ailleurs, une r�f�rence n'est pas vraiment CopyConstructible.

  3. #3
    Membre �clair� Avatar de vdumont
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    510
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 510
    Par d�faut
    Tu peux utiliser des pointeurs parcontre!

  4. #4
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Je me dis qu'il serait pas mal de t'aider d'abord � comprendre ce qu'est une r�f�rence.

    Contrairement aux instances d'objets et au pointeurs sur objets, une r�f�rence n'a pas d'existence propre.

    Une instance normale et un pointeur sont repr�sent�s physiquement en m�moire, et on peut donc prendre l'adresse � laquelle ils se trouvent, et connaitre le nombre de bits (ou plut�t de bytes) qui sont n�cessaire pour les repr�senter.

    Par contre, une r�f�rence, ce n'est qu'un "alias" d'un objet existant.

    Par "alias" il faut vraiment comprendre la d�finition de base du terme: un autre nom pour d�signer quelqu'un ou quelque chose.

    A la limite, on pourrait dire que mon alias est koala01: je ne m'appelle pas *vraiment* (pour l'�tat civil) koala01, mais il n'emp�che que, quand on s'adresse � koala01, c'est clairement � moi que l'on s'adresse, et je r�agis comme si on m'avait appel� par mon nom d'�tat civil.

    Par contre, koala01 n'existe que... parce que j'ai d�cid� d'utiliser ce terme comme alias.

    Le jour o� je "disparaitrai", koala01 disparaitra avec moi ou deviendra "invalide"... Du moins, jusqu'� ce que quelqu'un d'autre d�cide d'utiliser koala01 comme alias.

    Une r�f�rence agit exactement comme cela: c'est parce que l'on a d�cid� - � un moment donn� - que la r�f�rence repr�sente un objet existant qu'elle est devenue valide, mais elle devient invalide d�s que l'objet d'origine cesse d'exister tout en s'adaptant sans probl�me si on d�cide de changer l'objet d'origine auquel elle fait r�f�rence (avec la restriction que le nouvel objet d'origine doit exister).

    L'avantage de la r�f�rence, c'est qu'elle permet d'utiliser l'objet d'origine sans avoir � le copier en m�moire

    La diff�rence entre une r�f�rence et un pointeur, c'est que le pointeur existe r�ellement quelque part en m�moire.

    A ce titre, un pointeur n'est jamais qu'une variable comme une autre, m�me si c'est une variable un peut particuli�re en cela que son contenu est... l'adresse m�moire � laquelle on esp�rera trouver l'instance r�elle de l'objet recherch�.

    Mais c'est cette diff�rence qui permet de cr�er des conteneurs de pointeurs, et qui interdit de cr�er des conteneurs de r�f�rences: comment remplir un conteneur avec quelque chose qui n'a pas d'existence propre

    C'est un peu comme si tu d�cidais de remplir une bo�te de courent d'air d�guis�s en coups de vent

    Maintenant, c'est � toi de voir s'il est pr�f�rable de placer des instances r�elles de ton objet dans la pile ou si tu pr�f�res mettre des pointeurs sur l'objet.

    La question qu'il te faudra te poser est, principalement, de savoir si l'objet (�ventuellement point� par le pointeur) doit subsister ou non au retrait de la pile, ou si tu pr�f�res, de savoir si la pile est responsable ou non de la cr�ation et de la destruction des objets qu'elle contient.

    Si tu envisage ta pile comme simplement une mani�re de g�rer des �l�ments pr�-existants - et qui continuent � exister apr�s leur traitement en pile - dans un ordre pr�cis, il faudra utiliser une pile de pointeurs sur tes �l�ments.

    Si tu envisages au contraire de cr�er des �l�ments pour les mettre directement en pile, et que ces �l�ments ne doivent pas continuer � exister une fois qu'ils sont sortis de la pile, tu pourras tr�s bien pr�f�rer une piles d'�l�ments � une pile de pointeurs sur �l�ments
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

Discussions similaires

  1. R�ponses: 4
    Dernier message: 16/08/2011, 13h19
  2. [Livres/R�f�rences] Vos avis..
    Par Community Management dans le forum Livres
    R�ponses: 6
    Dernier message: 25/07/2005, 19h31
  3. Differences Stack et Heap
    Par elsargento dans le forum C++
    R�ponses: 9
    Dernier message: 26/05/2004, 16h10
  4. Passage d'un tableau par r�f�rence?
    Par sebduth dans le forum C
    R�ponses: 9
    Dernier message: 16/07/2003, 18h32
  5. [Concept] Table de r�f�rence
    Par matlo dans le forum D�cisions SGBD
    R�ponses: 3
    Dernier message: 20/01/2003, 15h01

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