最近在写表达式树,涉及到一些内存管理的囧事:在构造树的过程中经常要申请内存,一不小心就会内存泄漏,拿几个链表把所有申请内存的指针都记录下来,等程序结束后再一次性释放掉显然不可行,经过提醒于是考虑到智能指针。
智能指针LytPtr通过引用计数来判断是否释放内存。在写LytPtr过程中出现以下问题:
1.用int来记录引用计数,于是控制同一个对象的两个智能指针引用计数可能不同,这显然不正确,举例:
于是只能用指针int*来记录引用计数。
2.没有意识到引用计数跟控制对象的指针是绑在一起的,在释放控制对象的时候忘记把引用计数也释放掉。
结论:有什么东西绑定在一起就要考虑类。
3.引用计数自减的时候忘记判断引用计数(int*)是否为0,这样在释放没有控制任何对象的智能指针时会出错,因为引用计数初始化为0;
结论:在获得指针所指对象之前,必须首先判断指针是否为空
LytPtr代码如下:
最后,要意识到三个问题:
1.无论如何代码给别人看之前要先跑
2.以后是有可能加班加点的,要提高困的时候的工作效率
3.尽量首先学会在理论上去认识事物,不然等代码写出来再发现就晚了
第一次发贴,欢迎各位来喷~