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

SL & STL C++ Discussion :

STL::Vector - Destructeur.


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 22
    Par défaut STL::Vector - Destructeur.
    Bonjour à tous et avant tout merci pour l'attention que vous portez à ce post.

    Je débute avec la STL, ma question est, je pense, très simple mais je n'y ai pas trouvé de réponses claires.

    J'ai une classe Vehicule qui fonctionne correctement et contient un destructeur.
    Dans une classe Parking je réalise un " std::vector<Vehicule *> vehicules " qui reçoit plusieurs véhicules.

    La ou je coince c'est dans le destructeur de la classe Vehicule :

    - Est-ce qu'en faisant un " vehicules.clear() " j'aurai récuperer toute la mémoire ? Autrement dit est-ce que le destructeurs de véhicule sera bien appelé pour chaque élement de mon vector ?

    - Cela suffit-il pour supprimer toute trace de ce vector en mémoire ? ( Lorsque la classe est détruite le vecteur est-il détruit aussi ou faut il faire un équivalent d'un delete ? )

    Merci d'avance pour ces petites précisions !

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Si tu as alloué tes Vehicule* avec new, il faut les détruire avec delete, quelque soit la manière dont ils sont stockés. Un std::vector ou autre ne peut pas prendre la responsabilité d'effectuer le delete, tout simplement car ce n'est pas systématique (tu pourrais stocker des instances qui doivent survivre au conteneur, ou des adresses d'objets alloués sur la pile, etc...).

    Ensuite le destructeur de std::vector libère bien la mémoire qu'il a alloué, c'est le but de ce genre d'encapsulations

  3. #3
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Il y a bien les PtrContainers de Boost mais bon il faut avant toute chose comprendre pourquoi le vehicules.clear() ne suffirait pas par exemple...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 22
    Par défaut
    Je pense avoir compris pour clear(). Je me demandais juste si les destructeurs allait être appelé, mais comme l'a dit Laurent Gomila (merci) celà ne serait pas logique vu que la durée de vie de ces objets n'est pas obligatoirement gerée par la classe contenant le vector.

    En ce qui concerne boost, je ne connais pas du tout. De plus j'ai l'obligation d'utiliser la STL.

    Si cela peut interesser quelqu'un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Terrain::~Terrain(){
         for( std::vector<Vehicule *>::iterator i = vehicules.begin(); i != vehicules.end(); i++)
              delete *i;
    }

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

Discussions similaires

  1. Probleme avec la STL(vector) avec code C
    Par Benjy dans le forum SL & STL
    Réponses: 12
    Dernier message: 06/04/2006, 12h54
  2. Probleme avec parcours de stl::vector
    Par MDiabolo dans le forum SL & STL
    Réponses: 10
    Dernier message: 08/03/2006, 00h35
  3. STL vector addition
    Par dj.motte dans le forum SL & STL
    Réponses: 1
    Dernier message: 08/11/2004, 08h25
  4. [STL] vector<string> et appel de fonctions.
    Par guejo dans le forum MFC
    Réponses: 4
    Dernier message: 08/10/2004, 17h36
  5. STL::vector crash a l"execution
    Par sebA dans le forum MFC
    Réponses: 2
    Dernier message: 16/06/2004, 16h36

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