我在MSVC afxtempl.h中查找了afxtempl.h定义,并在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);
}任何建议都会有帮助。谢谢。
发布于 2014-04-22 04:27:08
如果没有定义复制赋值操作符,那么就不能定义它,也不能使用它。对于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 implementationhttps://stackoverflow.com/questions/23210250
复制相似问题