我有两个类,它们本质上是看起来像这样的字符串类。第一个类包含一个字符串作为成员,第二个类还包含一个字符串以及一个用于“MenuItem”类的指针数组以及一个跟踪器。
const int MAX_NO_OF_ITEMS = 10;
class Menu; // forward declaration
class MenuItem {
char* Menuitem;
//member functions
MenuItem();
...
~MenuItem();
friend Menu;
};
class Menu {
private:
char* m_Title;
MenuItem* m_MenuItems[MAX_NO_OF_ITEMS];
int m_menuTracker;
... //other functions not shown
}
我希望能够将一个 Menu 对象深度复制到另一个 Menu 对象,但我这样做的方式似乎确实是在复制“m_MenuItems”时它是一个浅拷贝。我确定“m_Title”成员正在被深度复制,因为我正在为它创建一个“新”字符*,但是当我尝试将源“m_MenuItems”复制到目标时出现问题,因为它们最终共享相同的记忆。这会导致问题,因为当调用解构函数时,它会在同一个对象上调用两次,导致我的程序崩溃。
这是我的副本和分配代码:
Menu& Menu::operator=(const Menu& src) {
if (this != &src && src.m_Title != nullptr) {
delete[] m_Title;
m_Title = nullptr;
m_Title = new char[strlen(src.m_Title) + 1];
strcpy(m_Title, src.m_Title);
//if current object has menuItems, then delete to make room for src.
for (int i = 0; i < m_menuTracker; i++) {
delete m_MenuItems[i];
this->m_MenuItems[i] = nullptr;
}
下面这个for循环是我的问题出现的地方......
if (src.m_MenuItems[0] != nullptr) {
for (int i = 0; i < src.m_menuTracker; i++) {
m_MenuItems[i] = src.m_MenuItems[i];
}
this->m_menuTracker = src.m_menuTracker;
}
else
this->m_menuTracker = 0;
}
else {
this->setEmpty();
}
return *this;
}
我应该如何为目标“m_MenuItems”分配一个新的内存块?