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