[英]Problems freeing memory in a copy constructor
我有這個父 class
class Monster
{
char* nume;
double hp;
float* dmgAbilitati;
int nrAbilitati;
}
使用此復制構造函數
Monster(const Monster& src)
{
if (nume != nullptr)
delete[] nume;
this->nume = new char[strlen(src.nume) + 1];
strcpy_s(this->nume, strlen(src.nume) + 1, src.nume);
this->hp = src.hp;
this->nrAbilitati = src.nrAbilitati;
if (dmgAbilitati != nullptr)
delete[] dmgAbilitati;
this->dmgAbilitati = new float[this->nrAbilitati];
for (int i = 0; i < this->nrAbilitati; i++)
this->dmgAbilitati[i] = src.dmgAbilitati[i];
}
我在問是否必須使用這些語句
if (nume != nullptr)
delete[] nume;
if (dmgAbilitati != nullptr)
delete[] dmgAbilitati;
因為我試圖重載這個子 class 中的前/后增量運算符
class giantSpider : private Monster
{
int durataStun;
.
.
.
const giantSpider operator++(int)
{
giantSpider aux(*this);
durataStun++;
return aux;
}
}
它會引發如下圖所示的異常(有時也可以),如果我不包括這些陳述,一切都很好。
我正在使用這個構造函數來初始化參數
Monster(const char* nume, double hp, int nrAbilitati, float* dmgAbilitati)
{
if (nume == nullptr)
throw new exception("Nume invalid!\n");
else
{
this->nume = new char[strlen(nume) + 1];
strcpy_s(this->nume, strlen(nume) + 1, nume);
}
if (hp <= 0)
throw new exception("Hp invalid!\n");
else
this->hp = hp;
if (nrAbilitati <= 0 && dmgAbilitati == nullptr)
throw new exception("nrAbilitati invalid sau dmgAbilitati invalid!\n");
else
{
this->nrAbilitati = nrAbilitati;
this->dmgAbilitati = new float[nrAbilitati];
for (int i = 0; i < nrAbilitati; i++)
this->dmgAbilitati[i] = dmgAbilitati[i];
}
}
對於孩子:
giantSpider(const char* nume, double hp, int nrAbilitati, float* dmgAbilitati, int durataStun)
:Monster(nume, hp, nrAbilitati, dmgAbilitati)
{
if (durataStun <= 0)
throw new exception("Numar introdus invalid!\n");
else
this->durataStun = durataStun;
}
這主要是:
float v1[] = { 125,234.22,8643.3 };
giantSpider g2("Ana", 1000, 3, v1, 3);
cout << g2 << ++g2 << g2++ ;
我已經重載了 << 運算符。
這些陳述
if (nume != nullptr)
delete[] nume;
if (dmgAbilitati != nullptr)
delete[] dmgAbilitati;
沒有意義,因為數據成員nume
和dmgAbilitati
尚未初始化。 更准確地說,memory 都沒有分配到它們指向的位置。
所以這些語句調用未定義的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.