设计实现C++内存的半自动释放

本文探讨了C++中手动内存管理的挑战,并提出了一种通过设计基类`Object`来实现内存半自动释放的方法。利用C++析构函数的特性,`Object`基类可以在析构时释放其子类对象,从而简化内存管理。文章详细介绍了设计思路、代码实现、代码分析以及使用方式,并指出这种实现虽能减轻内存管理负担,但并非完全自动化,仍需确保父对象的析构函数被调用以避免内存泄漏。
摘要由CSDN通过智能技术生成
C++的一大优点就直接提供了内存的申请和使用功能,让程序员可以根据自己的需要, 通过alloc系列函数或new运算符 来申请使用内存,但是C++却不像java或C#那样,提供了垃圾的自动回收机制,我们申请的内存要由自己来管理、自己来释放,也就是说,C++把内存管理的责任完全交给了程序员。 申请资源是简单的,在需要的时候申请就可以了,然而请神容易送神难,内存的释放却是一个非常让人头痛的问题。有的程序员忘记了释放申请的内存(堆中的内存),有的程序员对一块释放了的内存,再次释放等等,都引发了一系列的错误。

内存管理是C++最令人痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的性能,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在。难道使用C++就不能像使用C#或java那样,不管内存的释放吗?其实我们可以通过适当的设计来减轻我们对内存的管理任务。虽然不能像C#或java那样,完全不管内存的使用和释放,但是也能在很大程度上减轻我们对内存的管理压力。下面就以本人设计的一个基类说明一下,如何实现C++内存的半自动释放。至于为什么说是半自动释放,看完这篇文章你就会知道了,现在可以不必深究。

一、设计思想
我们知道,在C++中,当一个对象被释放时,它的析构函数必定会被调用,而如果该对象的类型是一个子类,则其先调用自己的析构函数,再调用其父类的析构函数。所以我们可以利用这个特性设计一个基类Object,它的责任就是负责释放它的子类申请的资源。而释放的操作,我们可以放在析构函数中。

在基类Object中保存一个链表childern,链表childern中的值是其new出来的对象的指针,我把该对象叫做父对象,由该对象new出来的对象叫做子对象,例如:
A a;
a.createObj();
类A是基类Object的子类,对象a通过调用其成员函数createObj来创建了10个B类(也是Object的派生类)的对象,则a就是父对象,而那10个B类的对象就是子对象。当父对象析构时,就会调用Object的析构函数,从而会把它的所有子对象释放掉。也就是说,当a被释放时,就会调用Object类的析构函数,从而释放它new出来的10个子对象(B类的对象)。这样,就可以简化我们对内存的管理。

PS:这个实现机制是参考Qt的内存管理机制。

二、实现代码
ps: 完整的实现代码可以点击这里下载

Object的头文件(object.h)如下:
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值