请问这样会造成内存泄漏吗?

院里有座山 2021-02-15 06:10:57

#include <iostream>
#include <cstdlib>
#include <ctime>

using std::cin;
using std::cout;
using std::endl;
using std::string;

class Grand
{
private:
int hold;
public:
Grand(int h = 0) :hold(h) {}
virtual void Speak()const { cout << "I am a grand class!\n"; }
virtual int Value()const { return hold; }
};

class Superb :public Grand
{
public:
Superb(int h = 0) :Grand(h) {}
void Speak()const { cout << "I am a superb class!!\n"; }
virtual void Say()const { cout << "I hold the superb value of " << Value() << "!\n"; }
};

class Magnificent :public Superb
{
private:
char ch;
public:
Magnificent(int h = 0, char c = 'A') :Superb(h), ch(c) {}
void Speak()const { cout << "I am a magnificent class!!!\n"; }
void Say()const { cout << "I hold the character " << ch << " and the integer " << Value() << "!\n"; }
};

Grand* GetOne();

int main()
{
srand(time(0));
Grand* pg;
Superb* ps;
for (int i = 0; i < 5; i++)
{
pg = GetOne();
pg->Speak();
if (ps = dynamic_cast<Superb*>(pg))ps->Say();
}
cout << "Bye.\n";
return 0;
}

Grand* GetOne()
{
Grand* p;
switch (rand() % 3)
{
case 0:
p = new Grand(rand() % 100);
break;
case 1:
p = new Superb(rand() % 100);
break;
case 2:
p = new Magnificent(rand() % 100, 'A' + rand() % 26);
break;
}
return p;
}

GetOne函数里new内存,需要释放吗?
...全文
153 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
forever74 2021-02-16
  • 打赏
  • 举报
回复
你起床要刷牙么? new出来的要释放么? 原则上要。 就今天一天来说,你着急没空刷牙,天也不会塌。你之后总有机会补刷的。 就这个代码来说,你不释放,系统也不会崩溃。程序结束了资源自然就回收了。
赵4老师 2021-02-15
  • 打赏
  • 举报
回复
50行前加一句 delete pg;
Keven_11 2021-02-15
  • 打赏
  • 举报
回复
new的内存要释放
真相重于对错 2021-02-15
  • 打赏
  • 举报
回复
凡事new 出来的必须 delete 回去

33,317

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧