内存泄露就是new出来的东西没有delete,我们能够这样:创建动态对象的人虽然使用new来创建对象;使用此对象的人负责释放此内存块。
比如:我和他人共享一个消息队列,他人将消息(new出来的对象)放到消息队列中,他不负责释放;我从消息队列里取消息,我一旦从消息队列里取出一个消息,消息队列里就不再有这个消息,消息的控制权和全部权都在我手上,我在用完之后就应该delete。这样就保证了代码编写的简单话,仅仅要大家都尊周这个简单的方法就能够保证没有内存泄露。
再比如:ACE中有个ACE_Message_Block,就仅仅见有各种new,但没见到delete,当时看演示样例肿么都认为郁闷,于是自己小心翼翼的delete,搞到最后几次反复delete还把程序搞挂了。尼玛。当时仅仅是知道教程上说要用release方法来释放,如今感觉应该是懂了。由于ACE_Message_Black是使用了消息计数的,所以要用自己的成员方法release方法来释放内存。
上面仅仅是消息队列使用的一个样例,有些情景没有这么典型。比方,有可能是你自己创建自己使用,自己释放,但仅仅要想着这个原则,就能够非常easy从业务上发觉什么时候该释放了。
有个Linux的工具能够測试你的程序有没有内存泄露:Linux下C++内存泄露检測工具及用法
时间: 2024-10-15 21:30:18