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