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 :

Question de conception


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 33
    Par défaut Question de conception
    Bonjour j'ai (encore) une question de C++, mais là c'est plus de la conception.

    Pour simplifier, j'ai pour mon programme une classe A qui est représentée par une image, qui varie selon les argument passés au constructeur. Je cherche à ne pas "stocker" l'image dans mon objet afin que si plusieurs objets A utilisent la même image, il n'y ait qu'une seule image en mémoire dans le programme.

    Comment faire? J'ai plusieurs idées mais je suis pas sûr de comprendre ce qui va se passer concrètement si je les essaie :

    - A priori l'idéal ça serait que j'envoie le nom de fichier de l'image dans le constructeur de A, et qu'il stocke le fichier en mémoire si il n'y est pas, et puis ensuite que de toute façon il pointe dessus par attribut. Le prob : comment je vais pouvoir gérer tout ça vu que je serai dans mon constructeur ?

    - Une autre possibilité ça serait que je créé mes images par avance, et que je les envoie par référence au constructeur de A, qui lui stocke juste un pointeur... mais ça va vite être lourd à écrire et c'est pas vraiment possible à automatiser, enfin c'est pas top de devoir créer plein d'objets annexes que je vais plus ou moins paumer après et jamais m'en servir directement

    - D'autre part quand je vais effacer mes éléments de la classe A, il faudrait aussi que je puisse libérer la mémoire que prend les images associées...

    Bref je vois pas trop comment faire ça "proprement"... une idée?

  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 : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    pourquoi ne pas utiliser une classe dédiée qui stockerai les images dans un tableau, ou une table de hachage, et qui contrôlerai l'unicité de ces images.

    Ensuite chaque classe A qui a besoin d'une image irai la demander à cette classe dédiée.

  3. #3
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    Bonjour,

    Citation Envoyé par lezebulon Voir le message
    - A priori l'idéal ça serait que j'envoie le nom de fichier de l'image dans le constructeur de A, et qu'il stocke le fichier en mémoire si il n'y est pas, et puis ensuite que de toute façon il pointe dessus par attribut. Le prob : comment je vais pouvoir gérer tout ça vu que je serai dans mon constructeur ?
    Pour cette approche, une solution possible consiste à doter ta classe A d'un conteneur global (avec le mot-clé static).
    Comme cela, ton conteneur sera partagé par toutes tes instances.

    Citation Envoyé par lezebulon Voir le message
    - Une autre possibilité ça serait que je créé mes images par avance, et que je les envoie par référence au constructeur de A, qui lui stocke juste un pointeur... mais ça va vite être lourd à écrire et c'est pas vraiment possible à automatiser, enfin c'est pas top de devoir créer plein d'objets annexes que je vais plus ou moins paumer après et jamais m'en servir directement
    Effectivement, ça me paraît moins efficace que ta précédente solution.

    Citation Envoyé par lezebulon Voir le message
    - D'autre part quand je vais effacer mes éléments de la classe A, il faudrait aussi que je puisse libérer la mémoire que prend les images associées...
    Tu auras juste à ôter de ton conteneur l'image donnée par ton instance.
    Attention, cela libérera la mémoire pour toutes les instances en même temps.

  4. #4
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    LA solution : un shared_ptr.
    Comme ça tu n'as qu'une seule instance, c'est partagé de manière safe, et tu n'as pas de questions à te poser, ça se libère tout seul !

  5. #5
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    Bonjour,

    Citation Envoyé par poukill Voir le message
    LA solution : un shared_ptr.
    Pour information, ça se trouve dans boost ces petites bêtes là.

    Et un petit exemple d'utilisation dans la faq pour pouvoir démarrer.

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    C'est aussi dans le nouveau standard : std::tr1::shared_ptr

  7. #7
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    Ah d'accord, je n'étais pas au courant.
    C'est celui de boost ou tout a été refait?

Discussions similaires

  1. [WIN32] question de conception
    Par gdpasmini dans le forum MFC
    Réponses: 4
    Dernier message: 10/07/2006, 11h08
  2. [Data-sources] Questions de conception
    Par xfacq dans le forum Général Java
    Réponses: 1
    Dernier message: 02/06/2006, 01h32
  3. [VB.net] Question sur conception
    Par arno2000 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 14/04/2006, 08h35
  4. [XML]Question de conception
    Par nana1 dans le forum Persistance des données
    Réponses: 17
    Dernier message: 17/11/2005, 09h34
  5. [Strategie][GUI]Petite question de conception
    Par bischof dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 26/10/2004, 22h31

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