我试图通过重载equals运算符来创建类的深层副本 - 但是,它似乎不起作用。任何帮助表示赞赏!
这是我要复制的课程:
class CMap {
public:
int m_nWidth;
int m_nHeight;
char* m_pData;
void setDimensions(int nWidth, int nHeight);
void operator = (CMap* rhs);
};
这是我的重载运算符:
CMap& operator = (const CMap&rhs)
{
if (this == &rhs)
return *this;
memcpy(this -> m_pData, rhs.m_pData, sizeof(char)*rhs.m_nWidth*rhs.m_nHeight);
return *this;
}
这是主要的函数调用。 myMap是一个CMaps数组。
CMap tempMap;
tempMap.setDimensions(myMap[0].m_nHeight, myMap[0].m_nWidth);
tempMap.m_pData = myMap[0].m_pData;
答案 0 :(得分:4)
const &
参数,而不是指针,并返回对象的引用,而不是任何内容。尊重第三点,你做了一件不做的事情" true"复制:通过指针使用动态数组。编译器只会复制指针,所以你必须编写自己的operator=
来手动复制数组(你在问题中尝试的是什么)。
最简单的解决方案是:使用std::vector
之类的容器而不是手动内存管理。它已经正确地实现了复制和分配,因此您不必在班级中编写自己的operator=
。