繁体   English   中英

我刚刚了解了 C++ 中的动态 memory 分配

[英]I just learned about dynamic memory allocation in C++

我需要防止 memory 泄漏,因为它会为他的作业动态分配和删除。 我的作业代码(大)不起作用。 所以我制作了小示例代码以更好地理解,但它也不起作用。

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 是类。 我不允许触摸 class 公共接口。 挑战在于,我需要使用私有成员 m_pointer 和指针的私有成员数组 m_monster 正确地新建和删除,其大小为一些全局常量,如 MAX。 我认为,除了挑战之外,我的代码似乎还可以。 我刚刚学到的这个动态的东西真是太糟糕了。 我想至少正确地尝试我的小案例代码。 应该对此代码进行什么尝试?

谢谢

如上所述,您应该在其析构函数中删除动态分配的 papa 对象。 您可能知道,C++ 为每个 class 提供默认构造函数,但它不包括动态分配的指针。 您应该添加一个析构函数:

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM