一些程序员喜欢在释放指针对象后将指针变量设置为空:
delete ptr;
ptr = 0;
如果有人再次尝试释放指针对象,则不会发生任何事情。在我看来,这是错误的。在指针对象被释放后访问指针是一个错误,错误应该尽快跳到你的面前。
是否可以将替代值分配给指定已释放指针对象的指针变量?
delete ptr;
ptr = SOME_MAGIC_VALUE;
理想情况下,我希望 Visual Studio 2008 在 Debug模式下告诉我“程序已终止,因为您试图访问此处已发布的指针对象!”。
好吧,看来我得自己检查了。以下模板有什么问题吗?
template <typename T>
void sole_delete(T*& p)
{
if (p)
{
delete p;
p = 0;
}
else
{
std::cerr << "pointee has already been released!\n";
abort();
}
}
最佳答案
没有。如果您真的想发出警告或出错,则在尝试删除
某些内容时测试“0”。
或者,在开发过程中,您可以省略 ptr = 0;
并依靠 valgrind 告诉您何时何地尝试双重释放。只需确保将 ptr = 0;
放回原处即可。
编辑 是的,我认识的人 C++ 不需要围绕 delete 0
进行测试;
我并不是在建议 if (ptr != 0) delete ptr;
。我建议 if (ptr == 0) { OP 要求的一些用户错误 } delete ptr;
关于c++ - 是否有已释放指针对象的既定指针值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4746679/