我需要防止内存泄漏,因为它会动态分配和删除其作业。我的作业代码(大)无法正常工作。因此,我编写了一些小示例代码来更好地理解,但是它们都不起作用。
include <iostream>
using namespace std;
const int MAX=5;
class son;
class dau;
class papa
{
public:
papa(int pair);
void show();
int pair();
void allocate(int howmanyeach);
private:
son *sonpnt[MAX];
dau *daupnt[MAX];
int m_pair;
};
class son
{
public:
son(int don);
int money();
private:
int m_money=0;
};
class dau
{
public:
dau(int don);
int money();
private:
int m_money=0;
};
//////////////////////////////////////////
papa::papa(int pair)
{
m_pair=pair;
}
int papa::pair()
{
return m_pair;
}
void papa:: allocate(int howmanyeach)
{
if( howmanyeach > MAX || howmanyeach<1)
cout<<"impossible"<<endl;
else
for(int i=0; i<howmanyeach; i++)
{
sonpnt[i]=new son(7);
daupnt[i]=new dau(5);
}
}
void papa::show()
{
for(int i=0;i<MAX; i++)
{
if(sonpnt[i]!=nullptr)
cout<<sonpnt[i]->money();
}
cout<<'\n';
for(int i=0;i<MAX; i++)
{
if(daupnt[i]!=nullptr)
cout<<daupnt[i]->money();
}
}
son::son(int don)
{
m_money+=don;
}
int son::money()
{
return m_money;
}
dau::dau(int don)
{
m_money+=don;
}
int dau::money()
{
return m_money;
}
/////////////////////////////
int main()
{
papa p(5);
p.allocate(1);
p.show();
}
如果您可以指出这一点,将会很有帮助此外,有关我的主要项目的任何建议也将有所帮助。我需要三个班级来互相学习。游戏而已。玩家,怪物,领域都是职业。我不允许触摸类公共接口。挑战在于,我需要使用私有成员m_pointer和指针私有成员数组m_monster正确地进行新建和删除,该数组的大小类似于MAX这样的全局常量。我认为,除了挑战之外,我的代码似乎还可以。我刚学到的这个动态的东西真是令人讨厌。我至少要正确尝试我的小写代码。此代码应尝试什么?
谢谢
如上所述,您应该在它的析构函数中删除动态分配的papa对象。可能您没有,C ++为每个类都提供了defualt构造函数,但它确实包含了动态分配的指针。您应该添加一个析构函数:
papa::~papa()
{
for(int i=0;i<MAX; i++)
{
delete sonpnt[i];
delete daupnt[i];
}
}
我也将更改构造函数,以将这些指针显式初始化为null ptr:
papa::papa(int pair)
{
for(int i=0;i<MAX; i++)
{
sonpnt[i] = nullptr;
daupnt[i] = nullptr;
}
m_pair=pair;
}