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 :

[Débutant] tableau d'objets => pile ou tas?


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 30
    Points : 30
    Points
    30
    Par défaut [Débutant] tableau d'objets => pile ou tas?
    Bonjour,

    admettons que j'aie une classe basique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class MyClass
    {
    public:
      MyClass() {var = 0;}
      ~MyClass() {}
      int getVar() const {return var;}
      void setVar(int _var) {var = _var;}
    private:
      int var;
    };
    Je veux maintenant déclarer un tableaux d'objets MyClass, mais avec un maximum d'espace alloué dans le tas. Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MyClass *myTab = new MyClass[20];
    A ce moment, tous les objets MyClass qui sont dans myTab sont-il dans le tas ? Et est-ce que les variables membres de chaque objet MyClass sont-elles aussi dans le tas ?

    Est-ce que la façon de faire ci-dessus est la meilleure concernant la gestion de la mémoire ?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    tout ce qui est alloué avec new est dans le tas, donc le tableau complet de tes 20 éléments est dans le tas, leurs variables membres aussi, puisqu'en fait, l'espace alloué pour une instance de classe est celui de ses données membres

    ensuite, est-ce que c'est la meilleurs façon... ça dépend, qu'est-ce que tu veux faire de ton tableau après ? si c'est pour le supprimer à la fin de la portée du pointeur, autant l'allouer dans la pile...

    sinon, pourquoi ne pas utiliser un vector ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Est-ce que la façon de faire ci-dessus est la meilleure concernant la gestion de la mémoire ?
    Non, bien entendu.
    Boost ftw

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 30
    Points : 30
    Points
    30
    Par défaut
    Merci Swoög.

    Et aussi merci à loufoque pour ce précieux conseil, que je vais de ce pas appliquer. Mais c'était pas la peine de détailler autant.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    On évite la gestion de mémoire manuelle, car on peut faire des oublis et provoquer des fuites mémoires, ça ne suit pas l'optique RAII, et c'est pas exception-safe.
    Boost ftw

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Un vecteur alloue aussi sur le tas.
    Pour le RAII, les pointeurs intelligents sont la solution

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

Discussions similaires

  1. [Débutant]Detruire un objet
    Par wkd dans le forum Débuter
    Réponses: 5
    Dernier message: 22/05/2004, 21h58
  2. Sauvegarde / Chargement d'un tableau d'objets
    Par Naruto dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2004, 14h34
  3. [ JSP ][ Débutant ] Passage d'objet par un forward
    Par captainpouet dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 08/04/2004, 10h33
  4. [VB6]Tableau d'objet withevents
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/02/2004, 19h44
  5. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33

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