我目前的代码效果如下:
if( objectPointer != NULL){ delete objectPointer; }
不起作用,因为编译器将指针设置为无效的十六进制数,例如:
0xbaadf00d
0xdeadbeef
等等....
那么在尝试删除对象之前检查无效指针的最佳方法是什么?
始终将指针初始化为NULL(即0).来自http://www.lysator.liu.se/c/c-faq/c-1.html:
空指针在概念上与未初始化的指针不同.已知空指针不指向任何对象; 未初始化的指针可能指向任何位置.
调用delete时,不需要检查not-NULL.明确定义它什么都不做.
delete NULL; // this is allowed
您编写的任何正确代码都不会受到编译器放入未初始化或已释放内存的这些奇怪值的影响.它将这些值放在那里,以帮助您找到错误.你好,你有一个bug.
如果它没有指向任何东西,最好的方法是将其设置为NULL.Globals,其他命名空间中的指针和本地静态指针会自动初始化为空指针.如果你需要针对NULL测试它们,那么类成员和普通本地应该手动初始化为NULL(有些人喜欢使用它们0
.当然,这完全等效).
然后,您可以检查NULL,但也可以立即传递指针delete
,因为它对删除空指针没有任何影响(由C++标准保证).