J'essaie d'éviter d'avoir des pointeurs, et au lieu de faireÉvite pointeurs dans std :: liste
std::list<std::pair<int,int>* > myList;
void addElement(int a, int b) {
myList.push_back(new std::pair<int,int>(a,b));
}
je me suis dit que je pouvais faire quelque chose comme
std::list<std::pair<int,int> > myList;
void addElement(int a, int b) {
std::pair<int,int> p(a,b);
myList.push_back(p);
}
Si je comprends bien le comportement, ce devrait stocker une copie de la paire, et l'effacer automatiquement en faisant myList.clear()
(par opposition aux pointeurs).
Est-ce la meilleure façon de le faire? Puis-je attendre du compilateur qu'il optimise l'objet inutile p
?
Est-ce important si elle est optimisée ou non (le coût sera insignifiant). –
Vous ajoutez un élément à une liste, ce qui provoquera une allocation de tas et entraînera de nombreux échecs de cache à chaque itération de la liste, et vous craignez de devoir en copier deux. –
Je m'inquiète de gérer des pointeurs dans mon code et de provoquer des fuites de mémoire. J'ai demandé à avoir plus d'expérience sur la mise en œuvre pour m'assurer que je ne faisais rien d'exceptionnellement stupide. J'apprécie tous les commentaires et réponses. –