“别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。……”
指针仍在栈中,只不过指向的内存单元被释放掉。
如:
int *p ;
/*p在栈中;*/
p = new int ( 100 ) ;
/*在堆中申请一块长度为4字节(int),并赋值为100; p 指向这个单元。假设单元地址为 address0 , 则 p = address0;*/
delete p ;
/*释放掉 p 指向的单元,但 p 仍存在,p 在栈中,并且 p 仍等于 address0;
直到 p 的生命期结束,内存管理自动释放 p,指针p 就被干掉了!!*/
需要说明的是,我们往往在程序,或者函数结尾时,进行 delete ;这时指针的生命周期往往也随之结束,所以这个细节很少被人注意,我们没有碰到这类的麻烦。对于写程序不注意结构化,不注意分模块,就会有隐患,嘿嘿。
感谢作者的总结,我只是写了我临时产生的体会。
re: A simple Game 邵腾飞 2006-11-09 20:19
我下载不下来,期待你发给我,shaotengfei1984@yahoo.com.cn
re: vc 使用总结 邵腾飞 2006-11-08 21:32
总结了很多经验,虽然有些我知道,但看了你写的一些东西后,我才懂得更全面。谢谢!