什么时候删除指针后,要给指针赋NULL

删除后需要赋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

原文地址:https://www.cnblogs.com/likemao/p/8623801.html