ahm*_*n86 24 c++ pointers memory-management
在C++中如何决定或知道指针是否被删除?
当我试图删除以前在代码的另一部分中删除的指针时,它抛出了无法处理的异常.
我想知道是否有办法检查或尝试删除指针?有关高级内存操作的任何参考.
我也想掌握指针的未处理异常,并且对受保护或访问的访问是违规的,......这种错误.
感谢那些提供一些知识和时间来帮助其他人并分享他们的好处的人
许多现代c ++开发人员社区的重要建议是 - 使用智能指针或尝试避免使用原始指针.但是对于抛出安全性和保证内存不足(ISO_CPP_FAQ),当然如果你想避免使用智能指针的小开销[可能总是不明显但是它们有开销]你可以编写处理原始指针的自定义方法[ type*] - 这不是一般的. 首选智能指针指向原始指针.
在"Going Native 2013"中,给出了一个常见的建议 - 从不使用原始指针.
Alo*_*ave 27
可以有三种解决方案.您可能希望根据您想要实现的努力/质量比选择一个:
优雅,最正确的解决方案:
使用智能指针,您不必delete再次手动调用.这是克服此问题的最佳方法.它利用了RAII的原理,它非常适用于像C++这样没有内置垃圾收集器的语言.
不太优雅但可行的解决方案:
NULL删除后指定指针.调用delete一个NULL指针是一个空操作,因此就不再需要有额外的NULL检查,但是这可能会掩盖一些问题,而不是使他们看到的.
不太优雅但更正确的解决方案:
delete通过让程序崩溃来解决所有多个问题.您也可以使用像valgrind这样的内存分析器程序,然后修复代码以避免所有这些问题.
这是一个很好的问题,但是在手动内存托管环境(例如C / C ++及其表亲)中工作的基本真理之一是,没有一种好的方法可以在事后查看指针并询问其是否有效-一旦失效,它就消失了,看着它很容易爆炸。您的工作是确保它不会被删除或释放超过一次,并且在此之后再也不会被访问。
绝对要看一下智能指针,这些指针是为了在这种情况下简化程序员的生活而发明的。(更传统的方法是要小心,不要弄乱它,然后,当您知道指针已被删除时,可以将NULL分配给指针,如Alok所说。)
| 归档时间: |
|
| 查看次数: |
36623 次 |
| 最近记录: |