Copier du vecteur au vecteur en C ++

Je crée un vecteur A et souhaite copier un vecteur B dans une autre classe en utilisant la méthode ci-dessous, est-ce une manière correcte? Le vecteur A peut être détruit! J’ai cherché dans google, mais pas trouvé la bonne solution et l’explication significative. Merci tout le monde

void StateInit(vector listBtn) { _m_pListBtn = listBtn; }; 

Oui et non, vous passez le vecteur par valeur:

 void StateInit(vector listBtn) { _m_pListBtn = listBtn; }; 

Ce qui signifie que listBtn est une copie du vecteur A (si nous appelons le vecteur A passé en paramètre de StateInit), si vous supprimez le vecteur A, le vecteur B aura toujours la collection de pointeurs et ils seront valides depuis la destruction de un vecteur de pointeurs ne supprime pas les objects pointés car il ne peut plus maintenant comment (devrait-il appeler, supprimer, supprimer [], gratuitement?).

N’oubliez pas que si vous modifiez / supprimez l’un des éléments du vecteur A (à l’aide des pointeurs sur le vecteur), cet élément sera modifié dans le vecteur B (car c’est un pointeur sur le même élément).

Je ne suis pas sûr de votre intention avec cela, mais si vous souhaitez copier le vecteur entier, vous devez implémenter un mécanisme de clonage pour les objects, puis les copier à l’aide de transform:

 class cloneFunctor { public: T* operator() (T* a) { return a->clone(); } } 

Alors juste:

 void StateInit(vector listBtn) { transform(listBtn.begin(), listBtn.end(), back_inserter(_m_pListBtn), cloneFunctor()); }; 

SI votre intention n’est pas de le cloner mais de partager les pointeurs, vous devez passer le vecteur en tant que pointeur ou référence:

 void StateInit(const vector& listBtn) { _m_pListBtn = listBtn; }; 

Un meilleur moyen consiste à itérer sur le nouveau vecteur et à push_back les éléments de votre vecteur.

Voir exemple de code: std :: vector :: begin