1
28
在任何其他情况下,我总是设置一个指向
|
2
38
有几个答案提到,在调试构建中这样做可能有助于调试。 不要这样做 .
如果要“清除”dtor中的指针,最好使用另一种习惯用法—将指针设置为 已知错误指针值
说吧
你可能会有更好的机会抓住这个错误(虽然只是离开)
现在如果有什么东西提到
当您在调试模式下编译时,调试堆管理器很可能已经为您完成了这项工作(至少MSVC的调试运行时堆管理器将用0xDD覆盖释放的内存,以指示内存已死/已释放)。
这个规则可能也适用于其他原始指针,但这完全取决于指针的使用方式。 |
3
7
|
4
5
你不应该,因为两个原因:
|
5
4
首先,这是一个C实践,也是一个有争议的实践。一些人认为(对于C)它隐藏了如果不使用它会更快出现的错误,并且不可能区分使用释放的内存部分和使用从未分配的内存部分。。。 现在C++中?它是没用的,但原因和C不一样。
在C++中使用的是一个bug
最后,在析构函数中它真的是完全无用的。。。一旦析构函数运行,访问对象的任何字段都是未定义的行为。你已经释放了内存,所以很可能有其他东西写在那里,覆盖你小心放置的空值。事实上,内存分配器的工作方式通常是首先重新分配新释放的区域:这将提高缓存性能。。。更是如此(哈哈!)当然,如果我们说的是堆叠的话。
|
6
2
|
7
1
一般来说,不需要设置指向
一个常见的习语是声明
|
8
1
在调试模式下,这是值得的。我确实觉得它经常有用。在发布模式下,由于代码优化,编译器通常会跳过它,因此您不应该在生产代码中真正依赖它。 |
9
1
我会不惜一切代价避免使用原始指针,例如在有或没有smart point的情况下,显式地将其设置为NULL非常有用:
没有:
|
10
0
不,这不值得。 但如果你想保持一致,那么你可能应该这样做。 我通常会做的是创建一个 免费的 每次需要释放分配的数据时可以使用的函数(如果需要,可以使用更多的事件自由函数)。在这些函数中,建议您将指针设置为NULL(或标识符设置为无效值)。 |
11
0
我认为这样做总是值得的(即使从技术上来说你不需要这么做)。我将指针设置为NULL,以指示它指向的内存不需要释放。 如果在使用它之前检查指针是否有效也很有用。
在if条件中,将NULL放在第一位可以防止在滑出第二个“=”时将pSomething设置为NULL。你得到的是一个编译错误,而不是一个需要时间来追踪的bug。 |
12
-1
最好的做法是在删除指针后将其设置为NULL。一些代码检查工具也强制执行这一点。 |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |