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;}