MFC CList是否支持复制分配?

时间:2014-04-22 04:14:44

标签: c++ mfc clist

我在MSVC afxtempl.h中查找了CList定义,并在MSDN上查看了文档。我没有看到CList& operator=(const CList&);已定义。

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

 CList<int> a = b;

或者我应该在目标CList上从head手动迭代源CList到tailAddTail

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

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

1 个答案:

答案 0 :(得分: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