设计一个智能指针

来源:互联网 发布:入骨相思知不知瓶邪 编辑:程序博客网 时间:2024/04/28 16:26

智能指针的本质是为了解决内存泄露问题,在复杂项目中,对内存的分配和释放都是非常另人头疼的一件事,前一段时间工作中,就因为要去检查内存到底如何泄露了,耗费了我不少时间.

 

因此,我决定要自己开发一个智能指针(其实boost等库里面本来就有智能指针,不过我还是希望自己去开发一个,这对我来说本来就是一个学习和提高的过程).

 

首先来说一下我自己的需求:

1.智能指针应该是有类型的,也就是说,一个类型的对象指针,必须应该在这个类型的智能指针中保存.

2.智能指针应该即可以主动的去释放内存,又可以由系统托管的释放内存.

3.多个智能指针引用同一个对象指针时,所有的智能指针被删除以后才会释放对象所占用的内存.

4.应该支持只能指针类型的强制转化

5.应该支持指针的比较,移动等功能

 

事实上我开始想象的最理想的创建智能指针的模式是这样的:

share_ptr<type> ptr = share_ptr_new<type>(args...);

也就是说使用一个share_ptr_new函数来构造ptr对象,然后share_ptr_new调用type的构造函数来产生真正的内存分配,这样的好处是在代码中根本不需要普通的指针,一切的操作都可以以share_ptr为基本操作.可是对于这种类型的可变参数传递我到现在还是没有找到可以解决的方法(如果你有解决的方法请回帖指教:-))

 

我现在的想法是,在建立智能指针的时候可以并且只能通过以下的两种方式

1.通过普通的指针来建立

2.通过只能指针对象来建立

 

每当智能指针被建立,相应的内存地址都应该引用记数加一

 

当只能指针超过了他的生存域时,如果他还没有主动的去释放内存,则表明,这个指针已经悬空,此时,如果没有其他智能指针指向这个内存地址时,该内存就应该被释放.

 

关于指向数组的指针,指向数组的智能指针,在回收内存时需要释放数组所有的内存,这个也就是唯一的区别吧,提供一个share_ptr_array类即可.

原创粉丝点击