MFC CList prend-il en charge l’atsortingbution de copie?

J’ai consulté la définition de CLIST dans afxtempl.h et le document sur MSDN . Je n’ai pas vu le CList& operator=(const CList&); est défini.

Puis-je utiliser directement operator= pour copier un object CList comme celui-ci?

  CList a = b; 

Ou je devrais itérer le CList source manuellement de la head au AddTail et AddTail sur le CList cible?

  for(POSITION pos = a.HeadPosition(); pos; ) { const auto& item = a.GetNext(pos); b.AddTail(item); } 

Toutes les suggestions seront utiles. Merci.

Si l’opérateur d’atsortingbution de copie n’est pas défini, il ne l’est pas et ne peut pas être utilisé. C’est vrai pour CList , comme vous l’avez déjà observé, donc non, vous ne pouvez pas utiliser simplement operator= pour copier un object CList . Si vous voulez une copie complète de la collection, vous devrez écrire une fonction pour le faire manuellement.

Mais considérez si vous voulez vraiment une copie en profondeur. La plupart du temps, vous souhaiterez passer des types de collection par référence plutôt que par valeur. Cela est particulièrement vrai dans MFC, où ils peuvent contenir des objects dérivés de CObject qui ne peuvent pas nécessairement être copiés. En fait, vous remarquerez que la copie est explicitement interdite par la classe CObject , à l’aide d’un constructeur de copie privée et d’un opérateur d’affectation:

  // Disable the copy constructor and assignment by default so you will get // comstackr errors instead of unexpected behaviour if you pass objects // by value or assign objects. private: CObject(const CObject& objectSrc); // no implementation void operator=(const CObject& objectSrc); // no implementation