【发布时间】:2013-12-21 11:28:36
【问题描述】:
我正在尝试通过重载等号运算符来创建类的深层副本 - 但是,它似乎不起作用。任何帮助表示赞赏!
这是我要复制的课程:
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;
}
这是main中的函数调用。 myMap 是一个 CMap 数组。
CMap tempMap;
tempMap.setDimensions(myMap[0].m_nHeight, myMap[0].m_nWidth);
tempMap.m_pData = myMap[0].m_pData;
【问题讨论】:
-
“它似乎不起作用”是非信息性的。
-
@Joachim Isaksson 在 setDimensions 我分配内存。不幸的是,我必须保持这种状态
-
@H2CO3 不工作,我的意思是它没有执行深层复制。
-
所以,检查一些可能的常见问题。比如
this->m_pData和rhs->m_pData是同一个指针吗? -
@H2CO3 我只是将它作为检查包含在重载运算符中
标签: c++ operator-overloading deep-copy