Home > programming > 内存泄露啦

内存泄露啦

内存泄露真的是一个很令人纠结的问题,于是使用了诸如智能指针的东西来避免这个问题,但悲哀的是就连这样还是造成了内存泄露。仔细查看源代码以后发现了问题的所在。

程序使用的智能指针是基于引用次数的,也就是说当某一个object被引用的次数>0的时候,这个object就会保留在内存中。当引用次数减少到0的时候,也就是没有任何一个地方在使用这个object的时候这个object就会被删除。

在程序中有一个地方对于这个智能指针的使用不当导致了引用次数不能正常减少到0,引起了内存泄露。程序中有A和B两个对象,其中B是A的一个member。同时B有一个智能指针指向A(需要在运行的时候使用A的部分功能)。在一切正常的情形下面,当调用A的close的时候,A会调用B的close,同时B会将指向A的智能指针置空(也就是不指向A了),这个时候就是正常的不会产生内存泄露。但是异常的情况下,A的close调用B的close的时候,B不会清除对A的引用,这个时候由于A还有人引用–B还有一个指针指向A,所以A不会被析构,导致了内存的泄露。

这个问题提醒我即便使用了智能指针也要小心的使用,及时清除对对象的引用。还有就是最好不要交叉引用–A引用B,同时B引用A。

Categories: programming Tags: ,
  1. No comments yet.
  1. No trackbacks yet.