首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MFC CList支持副本分配吗?

MFC CList支持副本分配吗?
EN

Stack Overflow用户
提问于 2014-04-22 04:14:43
回答 1查看 2K关注 0票数 3

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

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

代码语言:javascript
复制
 CList<int> a = b;

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

代码语言:javascript
复制
 for(POSITION pos = a.HeadPosition(); pos; )
 {
      const auto& item = a.GetNext(pos);
      b.AddTail(item);
 }

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-22 04:27:08

如果没有定义复制赋值操作符,那么就不能定义它,也不能使用它。对于CList来说是这样的,正如您已经观察到的那样,所以不能只使用operator=来复制CList对象。如果要对集合进行深度复制,则需要手动编写函数。

但是考虑一下你是否真的想要一份深刻的副本。大多数时候,您希望通过引用传递集合类型,而不是通过值传递集合类型。在MFC中尤其如此,它们可以包含从CObject派生的对象,这些对象不一定能够被复制。实际上,您会注意到CObject类使用私有副本构造函数和赋值操作符显式不允许复制:

代码语言:javascript
复制
   // 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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23210250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档