导读 楼上的好像不太正确:首先,delete p后,p仍然可用;其次delete p不必和p=NULL连用。delete用释放new所进行的操作,可以把delete所进行的...
楼上的好像不太正确:首先,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罢了。