Я пытаюсь создать глубокую копию класса, перегружая оператор 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;
const &
, а не указатель, и возвращает ссылку на объект, а не что-либо. Уважайте точку три, вы сделали одну вещь, которая не выполняет "истинное" копирование: использование динамического массива с помощью указателя. Компилятор будет копировать только указатель, поэтому вам нужно написать собственный operator=
чтобы скопировать массив вручную (что вы пытаетесь в вопросе).
Самое простое решение: использовать вместо std::vector
вместо ручного управления памятью. Он правильно выполнил копирование и настройку, поэтому вам не нужно писать собственный operator=
в своем классе.