我在MSVC afxtempl.h
中查找了CList定义,并在MSDN上查看了文档。我没有看到CList& operator=(const CList&);
已定义。
我可以直接使用operator=
复制这样的CList对象吗?
CList<int> a = b;
或者我应该在目标CList上从head
手动迭代源CList到tail
和AddTail
?
for(POSITION pos = a.HeadPosition(); pos; )
{
const auto& item = a.GetNext(pos);
b.AddTail(item);
}
任何建议都会有所帮助。 感谢。
答案 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