由于这两年一直在做C和C++项目,感到在设计时,虽然 非常的小心在意内存管理问题,但是最终最大的问题还是出在内存管理上。所以研究了一段时间。
经过学习,发现现在有两种方法解决内存管理问题:
- 引用计数。例如COM技术。采用这种技术目的是为了能够安全的访问对象,即:只要有一个用户还在使用该对象,该对象就不会删除。
- 内存池。这个技术主要目的是解决内存分配效率问题。
引用计数技术不错,因为它能够让你不用考虑现在删除的对象是否被其他对象引用的问题。但是它是COM技术专用的。直接用COM技术会让我们在设计类的时候有很多局限(你的类也要从IUnknown派生么?)。boost库中的shared_ptr这个智能指针就是利用引用计数实现共享对象的。但是引用计数技术需要为每一个对象配一个小块内存用于计数,这可能让我们不太舒服。
内存池技术的主要目的是提高效率。它正好能和shared_ptr互补。那么为什么不这样做呢:
引用计数技术 + 内存池技术
这样,我们可以既不损失效率,还能对内存管理少些牵挂。
我想,下一个C++项目还是由我构建的话,除了智能指针,我不希望让我的程序再出现指针这个数据类型。指针——实在让人懊恼。