首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++中delete的用法,该怎么解决

2012-08-28 
c++中delete的用法假设A是一个类名。A aif(a0){delete aa0}anew A这里的delete是一种什么用法?不用

c++中delete的用法
假设A是一个类名。

A a;
if(a==0)
{
  delete a;
  a=0;
}
a=new A;


这里的delete是一种什么用法?不用delete,直接a=0,难道不可以吗?

[解决办法]
你声明的是个普通对象,而不是指针对象,你不必要new和delete,你要写就这样:
A *a=NULL
a=new A;

delete a,它的作用是释放掉申请的内存,与new匹配使用。
[解决办法]
除非你有个转型为指针的成员函数,否则你这个代码就是有问题的

[解决办法]
楼主作为引出问题的代码例子,存在一些问题:
delete a; // a的类型应该为指针类型。
所以,应该为:
A* a = new A;
if (a != 0)
{
delete a;
a = 0;
}

a = new A;

这里的delete的作用是释放指针a所指向内存空间,即将之前占用的内存归还给操作系统,供其进行再分配。如果不用delete,则不会释放内存空间,即原先占用的内存不归还给操作系统,但是该程序也不再使用了,导致的后果就是所谓的内存泄露,应该极力避免这种情况。
[解决办法]

探讨
引用:

A* a = new A;
if (a != 0)
{
delete a;
a = 0;
}

a = new A;

释放后,a=0;不会报错吗?

热点排行
Bad Request.