MFC CList 支持复制分配吗?

2024-05-21

我在 MSVC 中查找了 CList 定义afxtempl.h http://www.cppdoc.com/example/mfc/classdoc/MFC/AFXTEMPL.H.html并记录在MSDN http://msdn.microsoft.com/zh-tw/library/bxde0zae.aspx。我没有看到CList& operator=(const CList&);被定义为。

可以直接使用吗operator=像这样复制一个 CList 对象?

 CList<int> a = b;

或者我应该手动迭代源 CListhead to tail and AddTail在目标 CList 上?

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

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


如果未定义复制赋值运算符,则它未定义且无法使用。对于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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MFC CList 支持复制分配吗? 的相关文章