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 :

Vector : objets, pointeurs et pointeurs intelligents


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 70
    Par défaut Vector : objets, pointeurs et pointeurs intelligents
    Bonjour,

    Dans le cadre d'un jeu, je souhaite avoir un vector qui contiendra des objets. Aussi, comme les performances sont un point important, je me demande si le fait d'utiliser de stocker des pointeurs vers les objets dans le vector aura un impact significatif comparé au fait de stocker directement les objets.
    Et dans le cas d'utilisation de pointeurs, l'utilisation de pointeurs intelligents aura elle aussi un impact significatif sur les performances ?

    Merci d'avance pour vos conseils.

  2. #2
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut
    Salut,

    L'utilisation de pointeurs au lieu d'objet va réduire le nombre de copies qui sont faites lors des passages d'objets (donc le temps nécessaire à ces copies... je suppose).

    Je ne connais pas l'impacte que les pointeurs intelligents auront au niveau des performances mais... ça va surement te simplifier la vie au niveau gestion mémoire.

    Si tu décides d'utiliser des pointeurs intelligents, la librairie boost fournit des conteneurs particuliers pour ces derniers.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 105
    Billets dans le blog
    146
    Par défaut
    Bonjour,

    Je pense que si vous gérez bien votre mémoire... un vecteur d'élément ( ou de pointeur d'élément ) ne sera pas trop dur à utiliser.
    Pourquoi privilégier les pointeurs ( je ne suis pas sur de dire vrai à 100% ), c'est que vous allez surement faire une classe Objet ( par example ) et que cette classe sera hérité par les vaisseaux, les powerUp et autre objets dans le jeu.
    Donc, finalement vous aurez un vecteur d'Objet, et pour dessiner tout les objets, il n'y aura qu'a faire un parcours dans le vecteur et appeler la méthode 'dessin' sur tous les Objets.
    Cette méthode sera virtuelle pure dans la classe Objet, donc redéfini dans toutes les classes hérités...
    Le fait d'utiliser les pointeurs ( me semble t'il ) permet de dire au compilateur qu'il doit utiliser la méthode 'dessin' de la classe qui hérite la classe Objet. De plus je crois que je me suis embrouillé, mais faire une instance d'Objet dans mon cas ne marche pas, car c'est une classe virtuelle ... qui ne peux donc pas être instancier.
    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.

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Bonjour,

    Je pense que si vous gérez bien votre mémoire... un vecteur d'élément ( ou de pointeur d'élément ) ne sera pas trop dur à utiliser.
    Oui mais avec des pointeurs intelligents, il n'y aura nul besoin de gestion de mémoire. Le cout niveau performance pourrait s'avérer minimine comparer à la complexité de la gestion de la mémoire.

    Citation Envoyé par LittleWhite Voir le message
    Donc, finalement vous aurez un vecteur d'Objet, et pour dessiner tout les objets, il n'y aura qu'a faire un parcours dans le vecteur et appeler la méthode 'dessin' sur tous les Objets.
    Cette méthode sera virtuelle pure dans la classe Objet, donc redéfini dans toutes les classes hérités...
    Le fait d'utiliser les pointeurs ( me semble t'il ) permet de dire au compilateur qu'il doit utiliser la méthode 'dessin' de la classe qui hérite la classe Objet.
    En effet, l'utilisation de pointeur permet de stocker dans un conteneur des pointeurs sur objects de différentes classes, dès lors qu'elles héritent de la même classe de base. Ainsi l'appel à dessin utilisera la méthode (re)définit dans chaque classe dérivée.

    Citation Envoyé par LittleWhite Voir le message
    De plus je crois que je me suis embrouillé, mais faire une instance d'Objet dans mon cas ne marche pas, car c'est une classe virtuelle ... qui ne peux donc pas être instancier.
    En effet... ou presque... En fait la classe ne serait pas instanciable si elle... abstraite, donc la fameuse methode dessin de la classe de base serait virtuelle pure. Seules seront instanciables les classes dérivées définissant toutes les méthodes déclarées dans la classe de base.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 70
    Par défaut
    Merci pour vos réponses

    Oui mais avec des pointeurs intelligents, il n'y aura nul besoin de gestion de mémoire.
    Par exemple, si j'utilise des shared_ptr dans un vector, ils se chargeront de détruire leur objet si je les supprime du vector avec erase ?

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut
    Si tu utilises les shared_ptr, ils se chargent de pratiquement tout.
    Si tu veux les utiliser dans des conteneurs, jette un oeil à ceux proposés par boost. Il me semble avoir lu qu'il y avait des restrictions quant à l'utilisation de pointeurs intelligents dans des conteneurs autres que ceux spécialement conçus à cet effet.

Discussions similaires

  1. Pointeurs et pointeurs de pointeurs
    Par wallace27 dans le forum C
    Réponses: 10
    Dernier message: 09/04/2015, 22h07
  2. Instanciation d'objet et manipulation pointeurs
    Par cpElement dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/07/2011, 18h20
  3. Réponses: 21
    Dernier message: 06/08/2009, 09h31
  4. Réponses: 6
    Dernier message: 26/05/2007, 00h33
  5. Réponses: 8
    Dernier message: 26/08/2004, 18h59

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