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);