偶然间看到这样的一个问题:C++ 里删delete指针两次会怎么样?
《原题:https://www.zhihu.com/question/38998078#answer-41205877》
问题提的很2b,重点看大家的回答!
大多数人认为:第二次delete的时候,行为未定义,什么事情都可能发生。好习惯永远是delete之后立刻赋nullptr。这样即便意外第二次delete了,也没关系,因为delete nullptr是有良好定义的。其实我也是一直保持着这样的代码习惯。
这个问题随即便延伸出了另一个问题:delete后是否需要置空?
有一些人觉得:delete 之后赋值 nullptr 绝对是坏习惯,会掩盖真实的错误。也不利于使用各种 memory checker 工具找出错误。
类似的还有为了防止 double free 而在 free 之后赋值 NULL,一样是错误的。
在 C++ 里,任何资源释放的操作都应该在析构函数里进行,这样只要管好对象生命期就不会有资源泄漏了。
《未完。自己再钻研下》
网友评论