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 :

delete operator


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 315
    Points : 105
    Points
    105
    Par défaut delete operator
    bonsoir, lorsque je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Element  elem = *new Element();
    dois je faire un delete elem quand j'en ai terminé?

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Que crois-tu faire avec ce code ?

    Pourquoi ne pas utiliser directement :
    Sinon, pour la réponse directe à ta question, il faut faire un delete d'une variable temporaire non nommée, ce qui est impossible. Tu as donc un problème.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre régulier Avatar de Blowih
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Points : 115
    Points
    115
    Par défaut
    Salut,
    tu peux faire soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Element* elem = new Element();
    ...
    delete elem; // quand tu t'en sers plus
    soit
    et la tu n'as pas a faire de delete

    le premier bloc est un allocation dynamique, on alloue est libere la memoire explicitement,.
    Le second bloc est un allocation statique , l'allocation de liberation de memoire est automatique.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 315
    Points : 105
    Points
    105
    Par défaut
    et lequel est le mieux ou bien c'Est selon ce que l'on veut faire avec...ce que je veux faire est simple, lorsque je crée mon element, j'ai un constructeur qui affecte des valeur passées en paramèetre aux propriétés membres...
    ensuite, je ne fais que mettre l'élément dans un vecteur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Element  elem = *new Element(propriété1,propriété2);
    	lstLocation.push_back( elem );
    est ce que c'Est mieux alors de prendre le même element et de ne changer que les valeurs des propriétés?

    Aussi en passant, lorsque j'entre ces élément dans mon vecteur, il rentre déja ordonné, mais, est ce plus rapide de faire une recherce d'un élément avec un vecteur ou une liste chaînée[/code]

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Le problème avec le new, c'est que la question du delete se pose. Qui va faire le delete, quand ?
    L'allocation statique convient bien aux objets temporaires.

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    Citation Envoyé par shirya
    ensuite, je ne fais que mettre l'élément dans un vecteur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Element  elem = *new Element(propriété1,propriété2);
    	lstLocation.push_back( elem );
    Je ne veux pas dire de bêtises, mais il me semble que push_back fait une copie de l'élément "elem". Donc tu n'as pas besoin de garder celui que tu as créé statiquement. Dans la cas où tu ferais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Element elem(propriété1,propriété2);
    lstLocation.push_back(elem);
    l'élément qui se trouve maintenant dans lstLocation est une copie et donc toujours valide même lorsque la variable elem est détruite.

    Par contre si tu avais transmis directement le pointeur comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Element *elem=new Element(propriété1,propriété2);
    lstLocation.push_back(elem);
    alors c'est le pointeur qui est copié (et pas l'élément lui-même). Donc là tu devras faire le delete lorsque tu retires l'entrée de lstLocation ou lorsque tu détruis la list "lstLocation".

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 161
    Points
    161
    Par défaut
    Si tu veux créer un objet en passant des paramètres au constructeur, utilise plutot, en fonction du type de liste (list<Element> ou list<Element *>) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Element elem(param1, param2);
    //ou
    Element *elem = new Element(param1, param2);
    Tu risque d'avoir de fuites de mémoire si tu utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Element elem = *new Element(param1, param2);

Discussions similaires

  1. [Débutant] Insert, Update, Search and Delete (CRUD operation) with SharePoint 2013 using VS 2012
    Par siffon dans le forum Développement Sharepoint
    Réponses: 2
    Dernier message: 17/02/2014, 12h22
  2. operator delete privé
    Par MatRem dans le forum C++
    Réponses: 23
    Dernier message: 22/06/2008, 13h59
  3. operator new sans delete
    Par babar63 dans le forum C++
    Réponses: 21
    Dernier message: 26/02/2008, 22h33
  4. Réponses: 3
    Dernier message: 23/08/2005, 11h02
  5. Namespace et surcharge operator new/delete
    Par ZeLegolas dans le forum C++
    Réponses: 11
    Dernier message: 26/07/2005, 13h55

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