3

我查看了 MSVC 中的 CList 定义和MSDNafxtempl.h上的文档。我没有看到定义。CList& operator=(const CList&);

我可以直接operator=用来复制这样的 CList 对象吗?

 CList<int> a = b;

或者我应该手动从目标 CList 到目标 CList 迭代源headCList ?tailAddTail

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

任何建议都会有所帮助。谢谢。

4

1 回答 1

4

如果未定义复制赋值运算符,则它未定义且不能使用。正如您已经观察到的那样,这对于 是正确的CList,所以不,您不能仅用于operator=复制CList对象。如果您想要一个集合的深层副本,您将需要编写一个函数来手动执行此操作。

但是考虑一下你是否真的想要一个深拷贝。大多数时候,您会希望通过引用而不是值来传递集合类型。在 MFC 中尤其如此,它们可以包含派生自CObject不一定被复制的对象。实际上,您会注意到CObject该类明确禁止使用私有复制构造函数和赋值运算符进行复制:

   // Disable the copy constructor and assignment by default so you will get
   //   compiler 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
于 2014-04-22T04:27:08.820 回答