删除p指向的内存。
p成为“野指针”;
一般删除后应将p赋值为null。
----------------------------------------------
删除指向的资料,调用析构函数
但也有可能指向的内存内容并未改写
但这段内存已经无效,系统会回收的
而且p也成为野指针,指向的位置并未改变
但指向的位置内容可能已经不正确
所以一般来说立刻要 p = NULL;
-----------------------------------------------------
都是delete这个词给大家造成的误解,其祖宗free()可能看上去更好一点.
delete是什么也不删!!!!!!
delete只是通知OS,有一块堆上的内存它已经不要了,枪毙还是关押,一切由OS做主.
int *p=new int[100];
此时p是有地址的,设为0x00400001,其值设为0x10003000,其含义是在堆上从地址0x10003000开始起的400字节已从OS手中要过来p[0]=1234;
delete p;
通知OS,从0x10003000处起的400字节,我已不在乎它的死活,您看着办吧.
printf( "%p ",p);
此时仍可打印出0x10003000,因为变量p是你自己的局部变量.
printf( "%d ",p[0]);
我还想看最后一眼,这时OS多半还没有枪毙它,估计你还看上一眼1234,但已不能保证,也许OS在你通知后立即押赴刑场了.
....
过了数天
printf( "%d ",p[0]);
你想什么呢?那小子早已魂归西天多时了