我有類Egg
,我有預定義的構造函數。這是我的經營者=和析構函數什麼樣子:我班上的破壞者做錯了? C++
Egg& Egg::operator=(const Egg& rhs)
{
if (this == &rhs)
return *this;
size = rhs.size;
name = rhs.name;
return *this;
}
Egg::~Egg()
{
size = 0;
delete[] name;
}
我想要做的是雞蛋,它每次我創建一個新蛋的動態數組,它延伸。下面是我如何做到這一點:
Egg* eggArr = NULL;
void createEgg()
{
Egg * temp = eggArr;
eggArr = new (std::nothrow) Egg[eggsCnt + 1];
if (!eggArr)
{
std::cerr << "No memory!\n";
return;
}
for (size_t i = 0; i < eggsCnt; ++i)
{
eggArr[i] = temp[i];
std::cout << eggArr[i].getName();
}
eggArr[basketCnt].setName(eggsCnt, eggArr);
eggsCnt++;
delete[] temp; //problematic line
}
如果我刪除刪除[] temp,代碼完美工作,但有內存泄漏。 當它停留在程序中時,出於某種原因,我的eggArr也被破壞了,然後當我嘗試訪問它的某些成員時,它們是未定義的。問題在我的析構函數,運算符=還是其他地方?
想一想'name = rhs.name;'的作用。這是否複製數據或只是一個指向數據的指針? – NathanOliver
你正在做一個淺拷貝而不是深拷貝。你爲什麼使用'char []'而不是'std :: string'? –