c++ - 我刚刚了解了 C++ 中的动态内存分配
问题描述
我需要防止内存泄漏,因为它会为他的作业动态分配和删除。我的作业代码(大)不起作用。所以我制作了小示例代码以更好地理解,但它也不起作用。
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();
}
如果你能指出它会很有帮助另外,关于我的主要项目的任何建议都会有所帮助。我有三个班级,我需要从彼此那里得到东西。游戏而已。player, monster, field 是类。我不允许触摸类公共接口。挑战在于,我需要使用私有成员 m_pointer 和指针的私有成员数组 m_monster 正确地新建和删除,其大小为一些全局常量,如 MAX。我认为,除了挑战之外,我的代码似乎还可以。我刚刚学到的这个动态的东西真是太糟糕了。我想至少正确地尝试我的小案例代码。应该对此代码进行什么尝试?
谢谢
解决方案
如上所述,您应该在其析构函数中删除动态分配的 papa 对象。您可能知道,C++ 为每个类提供了默认构造函数,但它不包括动态分配的指针。您应该添加一个析构函数:
papa::~papa()
{
for(int i=0;i<MAX; i++)
{
delete sonpnt[i];
delete daupnt[i];
}
}
我也会更改构造函数以将这些指针显式初始化为空 ptr:
papa::papa(int pair)
{
for(int i=0;i<MAX; i++)
{
sonpnt[i] = nullptr;
daupnt[i] = nullptr;
}
m_pair=pair;
}
推荐阅读
- unity3d - hlsl CG 计算着色器竞争条件
- neural-network - 如何在 Chainer 模型中打印图层?
- mysql - MYSQL - 根据另一张表的内容从一张表中选择数据
- php - PHP中的array_merge不覆盖值
- java - java.lang.NoSuchMethodError: io.netty.channel.DefaultChannelId.newInstance()Lio/netty/channel/DefaultChannelId;
- javascript - 如何在 Rails 6 中执行自定义 javascript 函数
- javascript - 如何为每个 switch 语句更改添加淡入淡出 css 样式和图像
- c - char *a[]={"hello", "world"}; 有什么区别?和 char a[][10]={"hello", "world"};?
- django - 如何将 onChange 事件中的值传递给 Django url 模板?
- microsoft-cognitive - 表单识别器的内容解析错误