在SO上搜索时,我偶然发现这个问题,并且对于得票最高答案的一个评论(针对该答案的第五条评论)建议
delete p; p = NULL;
是一种反模式。我必须承认,我经常使用它,并有时/大多数情况下与检查if (NULL != p)
配对使用。该人本人似乎建议它(请参见destroy()
函数示例),所以我真的很困惑为什么它可能被认为是一种可怕的反模式。我出于以下原因使用它:
- 当我释放资源时,我还想使其无效以防止进一步使用,而NULL是表示指针无效的正确工具
- 我不想留下悬空指针
- 我想避免双重/多重释放错误-删除空指针就像nop一样,但删除悬空指针就像“自杀”一样
请注意,我不是在问关于"this"指针的问题,并且假设我们不生活在完美的C++世界中,需要维护旧代码,因此请不要建议任何智能指针:)。