C中的内存泄漏.编程风格
对于小程序,我们可以通过这种方式防止内存泄漏:
proc() { //allocate memory for matrix try { } catch { //free matrix memory } ... //free matrix memory } 如果我们的程序更复杂: proc() { //allocate memory for matrix try { } catch { //free matrix memory } ... try { } catch { //free matrix memory } ... try { } catch { //free matrix memory } ... //free matrix memory } 它看起来有点笨拙. proc() { //allocate auto_ptr try { } catch { } ... } 但是,据我所知,auto_ptr甚至不适用于数组.因此,在一般情况下,这是不可接受的方式. 解决方法
auto_ptr不是一个独特的案例.这不是“auto_ptr或没有”. auto_ptr是一般编程习惯用法的一个例子,它处理资源分配/解除分配而没有泄漏.
这个成语叫做RAII. 这意味着资源应该映射到一个对象,该对象管理资源的生命周期,并确保在适当的时候清理它. 在auto_ptr的情况下,这只需要通过让类存储指向已分配内存的指针来完成,并且在该类的析构函数中,对指针调用delete. 您可以使用它们而不是auto_ptr对自己的RAII类执行相同的操作. 它们是shared_ptr(引用计数的智能指针,它在最后一个引用存在时删除对象),scoped_ptr(更安全,但有限,相当于auto_ptr,可以在C 03中实现),以及unique_ptr,C 11替换for auto_ptr,它解决了auto_ptr所遇到的问题. unique_ptr可以安全地用在数组和标准容器中. 所以你不应该使用auto_ptr,但你绝对应该使用其他类型的智能指针和RAII. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |