首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

delete对象后毕竟要不要将对象置为NULL

2012-11-26 
delete对象后到底要不要将对象置为NULL以下是我的一个美国同事丹尔对此的看法:Member pointers do NOT hav

delete对象后到底要不要将对象置为NULL
以下是我的一个美国同事丹尼尔对此的看法:
Member pointers do NOT have to be set to NULL in a destructor. A destructor, as its name implies, destroys an object and the object can’t be accessed after that. So accessing anything (even if it were a pointer set to NULL) is absolutely wrong. I usually take setting pointers to NULL out of destructors because it is not needed. If an object gets accessed after it is destroyed, in any form, than it has to be tracked down. But NOT by accessing any of its member variables.
对象指针不需要设置为NULL在析构函数中。析构函数,顾名思义,销毁一个对象而之后该对象不在被使用到。所以存取任何东西(即使指针被设置为NULL)都是绝对的错误。我一般都将设置指针为NULL的语句从析构函数中移除,因为它并不被需要。如果一个对象能够在它被销毁后存取,那么这将能被追查出。但是不是因为存取它里面的任何成员。

对此他还写了个小程序来证明他的观点:

class A{public:    A() { m_pMember = new int;}    ~A() {        delete m_pMember;    }    int* m_pMember;};int _tmain(int argc, _TCHAR* argv[]){    A* pA = new A();    A* pB = pA;    delete pA;    if (pB->m_pMember)    {        int temp = *pB->m_pMember; //Crash    }    return 0;}

        这还只是个简单的情况,如果涉及到多线程或者多模块如多个dll之间传递对象,那么就极有可能因为某一对象已经销毁后,没有设置为NULL导致程序Crash。在这里还是建议各位一定要谨慎处理指针问题,避免引起不必要的奇怪问题。


热点排行