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 :

Petite question de C++ ..


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�

    Inscrit en
    D�cembre 2009
    Messages
    171
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2009
    Messages : 171
    Par d�faut Petite question de C++ ..
    Salut � tous,
    Supposons qu'on ait une classe de la forme :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class AClass 
    {
    public:
    	AClass(double attr){this->attr=attr}
    	virtual ~AClass(){}
            double aFunction(){return attr * attr;}
     
    private:
            double attr;
    };
    Ma question est la suivante : si on cr�e 1000 instances de cette classe, il y aura bien entendu 1000 double cr�es en m�moire. Mais qu'en est-il de "aFunction()" ? Est ce qu'elle est cr�e 1000 fois aussi ou alors cr�e une seule fois et appel�e avec l'argument "attr" correspondant � l'objet dont la m�thode a �t� appel�e ?

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    D�tails du profil
    Informations personnelles :
    �ge : 51
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par d�faut
    Citation Envoy� par kmedghaith Voir le message
    Ma question est la suivante : si on cr�e 1000 instances de cette classe, il y aura bien entendu 1000 double cr�es en m�moire.
    Et aussi 1000 instances de la classe elle-m�me, ce qui veut dire une table des m�thodes virtuelles pour chaque instance (si la classe est virtuelle, bien s�r). Or, c'est ton cas, car ton destructeur est virtuel.

    Citation Envoy� par kmedghaith Voir le message
    Mais qu'en est-il de "aFunction()" ? Est ce qu'elle est cr�e 1000 fois aussi ou alors cr�e une seule fois et appel�e avec l'argument "attr" correspondant � l'objet dont la m�thode a �t� appel�e ?
    Virtuelle ou pas, tu n'as qu'une seule instance de cette fonction dans ton code. Ce qui change, c'est le this qui sera diff�rent en fonction de l'instance appelante (param�tre tacite de la m�thode), mais c'est � peu pr�s tout dans un cas comme celui que tu pr�sentes.
    Cela pourrait �tre un peu plus complexe avec des templates, par contre.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au s�rieux, de toutes fa�ons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum ad�quat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre confirm�

    Inscrit en
    D�cembre 2009
    Messages
    171
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2009
    Messages : 171
    Par d�faut
    Ok merci.

  4. #4
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par Mac LAK Voir le message
    Et aussi 1000 instances de la classe elle-m�me, ce qui veut dire une table des m�thodes virtuelles pour chaque instance (si la classe est virtuelle, bien s�r). Or, c'est ton cas, car ton destructeur est virtuel.
    Chipotons un peu.
    Si la classe poss�de des fonctions virtuelles, il y a un un vpointer sur une vtable par instance.
    Si la classe h�rite virtuellement (sans fonction virtuelle), il y a un vpointer (probl�matique d'adresse) sur chaque instance.
    Si la classe poss�de des fonctions virtuelles ET h�rite virtuellement, de ce que j'ai compris, gcc n'a qu'un vpointer vers une vtable regroupant les 2 informations. En revanche, visual a 2 vpointers, un pour la table des fonctions virtuelles et un pour l'offset.
    Comme tu le vois, tout �a c'est d�pendant du compilateur.

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    D�tails du profil
    Informations personnelles :
    �ge : 51
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par d�faut
    Citation Envoy� par 3DArchi Voir le message
    Comme tu le vois, tout �a c'est d�pendant du compilateur.
    Je pense qu'il faut surtout retenir que, dans le cas d'une classe virtuelle, on alloue plus que la simple taille des attributs de la classe... Le "plus" �tant d�pendant du compilateur, de l'OS, et de pas mal d'autres facteurs.

    Coupons encore en quatre chaque quart de cheveu : on peut en plus avoir quelques "pertes" suppl�mentaires li�es � l'alignement des attributs...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au s�rieux, de toutes fa�ons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum ad�quat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Visuel XP] Petite question sur le theme XP...
    Par ZoumZoumMan dans le forum C++Builder
    R�ponses: 12
    Dernier message: 20/01/2005, 14h41
  2. [CR8.5] petite question ..
    Par mcrocher dans le forum SAP Crystal Reports
    R�ponses: 1
    Dernier message: 13/09/2004, 15h04
  3. Une petite question
    Par Etienne1 dans le forum MS SQL Server
    R�ponses: 3
    Dernier message: 10/08/2004, 16h19
  4. [FOREIGN KEY] petite question bete ...
    Par dzincou dans le forum PostgreSQL
    R�ponses: 5
    Dernier message: 13/01/2004, 16h35
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    R�ponses: 5
    Dernier message: 13/01/2004, 13h49

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