bonsoir, lorsque je fais ceci:
dois je faire un delete elem quand j'en ai terminé?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Element elem = *new Element();
bonsoir, lorsque je fais ceci:
dois je faire un delete elem quand j'en ai terminé?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Element elem = *new Element();
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Element elem;
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.
Salut,
tu peux faire soit
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
et la tu n'as pas a faire de delete
Code : Sélectionner tout - Visualiser dans une fenêtre à part Element elem;
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.
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
est ce que c'Est mieux alors de prendre le même element et de ne changer que les valeurs des propriétés?
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 );
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]
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.
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 feraisEnvoyé par shirya
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Element elem(propriété1,propriété2); lstLocation.push_back(elem);
Par contre si tu avais transmis directement le pointeur comme ceci:
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".
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);
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 *>) :
Tu risque d'avoir de fuites de mémoire si tu utilise :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Element elem(param1, param2); //ou Element *elem = new Element(param1, param2);
Code : Sélectionner tout - Visualiser dans une fenêtre à part Element elem = *new Element(param1, param2);
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager