`
runfeel
  • 浏览: 935659 次
文章分类
社区版块
存档分类
最新评论

C++内存泄漏的解决办法- -

 
阅读更多

发现大家对写库很热衷。不过,写一个库,用C++最麻烦的事情,就是你new完了要记着delete。不过,这么傻瓜化的操作,有没有办法让电脑自动完成呢?当然是可以的。思路有以下三点:
1、 Parent对象。
每一个对象,都要有唯一的parent,当parent析构时,要带动他所有的children析构。
好处:
实现简单,且具有逻辑性。
比如:一个窗口,他的按键,就应该是这个窗口的children, 当窗口析构的时候,按键也必须析构。
坏处:
不可以有复制构造函数。。
这个也很好理解。A-->B-->C中,a是b的parent,b是c的parent,如果允许复制,B复制了个D,那C就有两个parent,究竟怎么析构呢?
开源库的实现:
Qt实现了这种方式的内存管理,尤其是对GUI框架,十分适用。

2、 引用计数的SharedPtr
指针,进行复制操作的时候,引用计数+1,析构的时候引用计数-1,当引用计数为0的时候,释放空间。
好处:
实现简单
坏处:
具有循环引用的情况。要引入WeakPtr
开源库的实现:
Qt同时实现了这种技术,Boost也有相关实现。
我因为最近想自己实现一套Signal and slot库,也实现了SharedPtr,开源。
地址:http://gitorious.org/raylib/raylib/blobs/master/SmartPtr.hpp
评述:
这是C++中最通用的实现手段,如果你要做一套类库,尝试使用SharedPtr,会让事情变得更加简单。

3、重载new,实现GC
直接重载C++操作符,实现垃圾回收。初始化一个内存池,当内存池满的时候,进行垃圾回收操作。
好处:
一劳永逸
坏处:
实现困难。
占用内存大。
对已有的环境,不一定会有很好的支持。
开源库的实现:
python和java都有垃圾回收的实现,可以进行参考。
评述:
内存池也许不一定要做垃圾回收,如果是静态的内存池,可以加速内存分配的过程。

分享到:
评论

相关推荐

    几个内存泄漏的例子

    下面通过标题和描述中给出的几个例子来详细解释内存泄漏的情况及其解决办法。 例一:错误处理流程中的`return`导致的内存泄漏 在例一中,如果在`if`语句中返回`false`,`pObj`的`delete`操作会被跳过,导致内存泄漏...

    CString内存泄露HTML.rar

    4. `CString内存泄露的解决办法 - C-C++-VC-MFC - 悠悠网 - Powered by Discuz!.htm`: 这里可能列出了针对CString内存泄露的一些解决策略。 5. `求救:是内存泄露吗? - 边缘软件 - 棋牌游戏开发,棋牌游戏制做,...

    Android Native 内存泄漏系统化解决方案

    在 Android 平台上,C++ 内存泄漏问题的分析和定位一直是困扰开发人员的难题,因为地图渲染、导航等核心功能对性能要求很高,高德地图 APP 中存在大量的 C++ 代码。解决这个问题对于产品质量尤为重要和关键,高德...

    C/C++内存管理

    解决办法是在使用内存之前检查指针是否为NULL。 2. 内存分配成功,但是尚未初始化就引用了。应该为数组和动态内存赋初始值,即使是零值也不要省略。 3. 内存分配成功并且已经初始化,但操作越过了内存边界。例如,...

    C++常见错误总结及解决办法

    3. **内存管理错误**:C++允许直接管理内存,这可能导致内存泄漏、悬空指针和双重释放等问题。解决这些问题的方法包括使用智能指针(如`std::unique_ptr`和`std::shared_ptr`)来自动管理内存,或者确保在不再使用...

    Qt内存溢出检测

    Visual Leak Detector是一个开源的C++内存泄漏检测器,专为Windows平台设计,可以与Visual Studio无缝集成。它通过在运行时捕获堆分配和释放的信息,找出未能释放的内存块。VLD的使用非常简单,只需要将其包含在项目...

    C++内存泄漏检测原理+源代码

    摘要:VC/C++源码,系统相关,内存泄漏 C++内存泄漏检测原理+实例源码下载,是一个跨平台的C++ 内存泄漏检测器的源程序,一个主要缺陷是不支持多线程。分配内存时不进行文件名复制,而只是保存其指针;效率较高(编译...

    java内存泄露、溢出检查方法和工具.pdf

    解决内存泄露问题的方法有两种:第一种是安排有经验的编程人员对代码进行走查和分析,找出内存泄漏发生的位置;第二种就是利用一些内存检查分析工具来分析,找出内存泄露的具体位置。 Java虚拟机(JVM)的参数设置...

    C++程序内存泄漏检测方法

     在Linux平台上有valgrind可以非常方便的帮助我们定位内存泄漏,因为Linux在开发领域的使用场景大多是跑服务器,再加上它的开源属性,相对而言,处理问题容易形成“统一”的标准。而在Windows平台,服务器和客户端...

    java内存泄露总结

    解决办法是在`Person`类中重写`equals`和`hashCode`方法,并考虑所有关键属性的变化。 3. **监听器** 在Java编程中,经常需要添加各种监听器。例如,通过`addXXXListener()`方法为组件添加监听器。然而,如果不...

    VC内存泄漏检测原理及源码

    C++内存泄漏检测原理+实例源码下载,是一个跨平台的C++ 内存泄漏检测器的源程序,一个主要缺陷是不支持多线程。分配内存时不进行文件名复制,而只是保存其指针;效率较高(编译debug_new.cpp 时有效;参见文件中的...

    Microsoft Visual C++ 2005 Express Edition- Programming for the Absolute Beginner

    对于C++中的内存管理,如动态内存分配和释放,也会有详尽的解释,这对于避免程序中的内存泄漏至关重要。 书中可能还会介绍如何利用Visual C++ 2005 Express Edition的资源管理器、代码编辑器和调试器等工具来提高...

    mfc的常见错误及解决办法

    7. **内存泄漏**: - 错误类型:程序运行时间越长,占用内存越多。 - 原因:动态分配的内存未被正确释放。 - 解决方案:使用智能指针(如`shared_ptr`、`unique_ptr`)管理动态内存,或者确保在不再使用对象时...

    C++常见错误及解决方案,c++报错,C,C++源码.zip

    5. **内存管理错误**:C++允许程序员直接管理内存,这可能导致内存泄漏(分配的内存未释放)或悬挂指针(已释放的内存仍然被引用)。使用智能指针和遵循RAII(Resource Acquisition Is Initialization)原则可以帮助...

    高质量C++编程指南 林锐

    - **常见的内存错误及其对策**:识别并解决内存泄漏等问题。 - **指针与数组的对比**:指针和数组在内存管理方面的差异。 - **指针参数是如何传递内存的**:理解指针作为函数参数时的数据传递机制。 - **free和...

Global site tag (gtag.js) - Google Analytics