【问题标题】:Does MFC CList support the copy assignment?MFC CList 是否支持复制分配?
【发布时间】:2014-06-06 06:38:03
【问题描述】:

我在 MSVC afxtempl.hMSDN 上查找了 CList 定义。我没有看到CList& operator=(const CList&); 被定义。

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

 CList<int> a = b;

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

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

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

【问题讨论】:

    标签: c++ mfc clist


    【解决方案1】:

    如果未定义复制赋值运算符,则它未定义且无法使用。 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
    

    【讨论】:

    • 谢谢。顺便问一下,MFC 是否提供任何帮助函数来复制 CList?或者我需要制作一个自定义函数来复制?
    • 不,没有辅助函数。您已经有了遍历列表的正确想法。
    猜你喜欢
    • 2011-03-24
    • 1970-01-01
    • 2015-01-01
    • 2021-09-10
    • 2017-11-26
    • 1970-01-01
    • 2014-06-06
    • 2015-09-20
    • 1970-01-01
    相关资源
    最近更新 更多