我在 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(使用前将#替换为@)