2014-05-15 3 views
0

J'ai une liste avec des pointeurs sur certains objets. Je veux copier la liste mais avec de nouveaux pointeurs. Je veux dire tous les éléments de la liste, faire de nouveaux objets et insérer la nouvelle adresse dans la nouvelle liste.Copier la liste des pointeurs sans boucles

j'essaie d'utiliser avec:

std::list<Course*> tmp; 

tmp = courses; // courses is list<Course*>. 

std::for_each(tmp.begin(), tmp.end(), ReplaceAllCells()); 



class ReplaceAllCells { 
public: 
    ReplaceAllCells(){} 
    void operator()(Course* course) { 
     course = new Course(*course); 
    } 
}; 

après l'appel à la fonction i obtenir la nouvelle liste avec les mêmes pointeurs ... la valeur de tmp pas changé .. Comment puis-je résoudre ce problème sans utiliser des boucles ? merci.

+1

Votre clé 'Shift' est-elle cassée? – ooga

+0

J'aime un peu Froot Loops. –

Répondre

1

Les arguments de fonction sont transmis par la valeur C, si vous n'utilisez pas de type de référence. Lorsque vous avez:

void f(T t) 
{ 
    t = something..... 
} 

cela affecte uniquement la copie locale t, pas la variable qui a été donné comme argument à cet appel de fonction. Si T est un type de pointeur ne fait aucune différence

Vous devez accepter l'argument par référence si vous voulez le modifier, T &t ici, ou dans votre cas Course * &course.

Questions connexes