永发信息网

C++中 delete的实质是什么?

答案:7  悬赏:0  手机版
解决时间 2021-02-27 16:30
  • 提问者网友:趣果有间
  • 2021-02-27 08:42
C++中 delete的实质是什么?
最佳答案
  • 五星知识达人网友:深街酒徒
  • 2021-02-27 09:14
delete 是C++中释放内存的运算符

1)C++程序员需要自己维护堆的内存;
2)堆的空间远大于栈,栈是系统自己维护的;
3)堆中申请内存是用new;
4)delete是专门用来释放用new申请的对象或者内存的。
全部回答
  • 1楼网友:爱难随人意
  • 2021-02-27 14:43
楼上的回答好像不太正确:
首先,delete p后,p仍然可用;
其次delete p不必和p=NULL连用。
delete用来释放new所进行的操作,可以把delete所进行的操作看为new的你操作。int *P = new int;中的new的作用是为指针p赋“初始地址”的,如你的程序中p被赋予了0x00570738的首地址,此时p指向这块内存。
也就是说new操作(new是操作符operator,不是函数)只是为了动态分配内存,创建new操作符的本意是为了delete,普通的指针赋值以后,如果不再使用,想要消除的话必须要等到它的固有生存期结束以后,这就会占用机器资源。
delete操作也只是new的内操作,并不能删除p,它只是把new得的内容释放掉,防止内存泄漏。程序中使用new,而不使用delete释放自己分配的内存会引起系统可以使用的内存数量不断减少。如果你的程序是一个不断运行的服务器的话,那么最终你的系统会因为没有足够的虚拟内存而要崩溃!但是只要你关闭那个泄漏内存的程序那么它没有释放的内存自动会释放。
delete p;包含了p=UNLL操作,此时*p=0(because p=NULL).很明显delete并不是真的把变量p给销毁了(p的生存期没有结束),而是释放它所指向的内存(节省机器资源),delete后的p还是一个整形指针,只不过此时的*p=0罢了。
  • 2楼网友:独钓一江月
  • 2021-02-27 13:42
首先申明:指针也是一种变量,它自己也有一块存储空间,用于存放它指向的其他变量的地址。
你的代码中“ cout <<"p所指向空间的大小"<< *p <“cout <<"p的指向"<< p <前面“int * p = new int ;”给指针p分配了一块空间(不是它自己的),delete p;之后,释放了p所指向的空间。你用“*p=9;”系统就有分配了一块空间来存放9这个数字,然后让p指向它。
p的地址是不会变的,除非者个函数结束,p自己的空间才被释放,者就是“局部变量”。用new分配的空间,不是局部变量,函数结束后不会被释放,必须用delete释放,否则出现“内存泄漏”。
  • 3楼网友:煞尾
  • 2021-02-27 12:07
delete 只是删除了程序中的定义而已 要改变p的指向需要在程序中重新定义
由于c++的内存分配是需要程序员自己来管理、控制的所以在重新定义指针前是不会改变的
  • 4楼网友:行雁书
  • 2021-02-27 10:25
delete 只完成释放前面申请的堆内存空间的工作,你是对的,释放空间后,地址是永远都不变的,只是空间被释放,程序关闭后,地址才会被收回。
  • 5楼网友:走死在岁月里
  • 2021-02-27 09:34
delete之后,下次再重新申请的时候可以再申请这块内存地址,也就是将这块地址放到了空闲链表上,对于这块地址的内容,没有进行清空处理(也没有必要);由于你没有将p赋为NULL,所以p指针还是指向这块内存空间。
如果不delete的话,你这块内存是不能在申请使用的,也就是所谓的内存泄露。
对于delete之后的指针p,此时是“野指针”。
一般的正确做法是:
int * p = new int ;
if (p == NULL)(千万不要忘了这句话!!!)
{
//判断是否为空!使用空指针是不对的!!
}
delete p;
p = NULL;(千万不要忘了这一句话!!)
上面所说的,希望能理解……
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯