【发布时间】:2021-01-06 04:24:07
【问题描述】:
我有一个运算符和函数,其目标是将向量指针的值复制到向量。我读过只要它是一个向量指针,深度复制方法只会复制它的指针,而不是它的值。我想知道如何将其值复制过来。 (向量是CObject类的成员)
算子函数:
void CObject::operator=(CObject& rhs)
{
this->ClearObject(); //Object will be cleared first
// How to perform the deep copy below?
copy(rhs.m_Vector.begin(), rhs.m_Vector.end(), back_inserter(this->m_Vector));
}
声明为 -> void operator=(CObject& rhs);
算子函数的示例应用(在另一个类中执行):
CObject* m_pObjectOne;
CObject m_ObjectTwo;
m_ObjectTwo = m_pObjectOne;
(因此,当m_pObjectOne在其类析构函数中被删除时,m_ObjectTwo就失去了它的值)
矢量和其他:
struct OBJECT_ITEM
{
char m_chType;
UINT m_nDataByte;
BYTE* m_pData;
CString m_strRecipeTag;
}
std::vector<OBJECT_ITEM> m_Vector;
我也尝试过其他深拷贝方法,例如 push_back() 和 assign(),但结果相同。
任何帮助将不胜感激!
【问题讨论】:
-
m_ObjectTwo = m_pObjectOne真的可以编译吗?您提供的operator=函数不接受CObject *rhs。 -
@Sprite 是的,它是可编译的。嗯,我想知道是不是因为我已经简化了它。 m_pObjectOne 和 m_ObjectTwo 在我这边有数组。但它仍然是相似的。声明也是在 header 中完成的。
-
@Han 您要复制的向量到底包含什么?请提供更多详细信息。
-
@RemyLebeau 我已将矢量内容编辑到问题中,请看一下。
-
@Han 这并没有改变我所说的。您的代码当前正在浅复制
m_pData,如果每个OBJECT_ITEM都应该分配自己的数据,这将不起作用。OBJECT_ITEM应该有一个析构函数、一个复制构造函数和一个复制赋值运算符(在 C++11 及更高版本中,还有一个移动构造函数和一个移动赋值运算符),以便每个OBJECT_ITEM完全管理自己的数据。