删除后需要赋NULL:
1、当在一个类里的时候,删除类的某个成员对象,需要给它赋NULL,以防其他地方使用这个成员的时候,不知道这个成员是否存在
eg:
ref1::ref1() { tPint = new int(5); if (tPint) { delete tPint; tPint = NULL; } if (tPint) cout << *tPint << endl; else cout << "no exist" << endl; }
删除后不需要赋NULL:
1、类的析构函数里删除成员memberA,不需要赋NULL,因为这个类对象都被删除了,那它的成员就算赋NULL了,其他地方用到这个memberA在调试版本下也无法通过If(memberA)来判断这个成员是否存在,被删除的数据都会赋0xdd;
eg:
0xcdcdcdcd - Created but not initialised
0xdddddddd - Deleted
0xfeeefeee - Freed memory set by NT's heap manager
0xcccccccc - Uninitialized locals in VC6 when you compile w/ /GZ
0xabababab - Memory following a block allocated by LocalAlloc()
VC++在Debug编译方式编译的程序中,会跟踪用new分配的内存。新分配的内存会用0xcd(助记词为Cleared Data)填充,防止未初始化;当它被delete后,又会被0xdd(Dead Data)填充,防止再次被使用。这样有利于调试内存错误。之所以选这样的填充模式,是因为:
1.大数,若被当成指针就会越界
2.奇数,指针通常指向偶数地址
3.非0,这样不会和 NULL 混淆。
在Release版中不会有这些字节填充。
引用地址:http://blog.csdn.net/mxclxp/article/details/7524176