bonsoir, lorsque je fais ceci:
dois je faire un delete elem quand j'en ai terminé?Code:Element elem = *new Element();
Version imprimable
bonsoir, lorsque je fais ceci:
dois je faire un delete elem quand j'en ai terminé?Code: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:Element elem;
Salut,
tu peux faire soit
soitCode:
1
2
3 Element* elem = new Element(); ... delete elem; // quand tu t'en sers plus
et la tu n'as pas a faire de deleteCode: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:
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 feraisCitation:
Envoyé 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:
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:
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:
1
2
3 Element elem(param1, param2); //ou Element *elem = new Element(param1, param2);
Code:Element elem = *new Element(param1, param2);