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 �clair�
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    315
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 315
    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 : 51
    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
    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 �prouv� 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
    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 �clair�
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    315
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2003
    Messages : 315
    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 confirm�

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

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    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 chevronn�

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    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 �prouv�
    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 : 40
    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
    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