1.引言 不管在哪种系统平台/编程语言下,内存资源管理是非常重要的问题,稍不留意就会导致内存泄漏,更有甚者访问非法空间,导致错误。说到底,没有在合适的时机释放对象,或者访问了已经释放的资源。在有垃圾回收的语言中,由平台环境负责资源的及时回收;在C++中则需要程序员自己把握,在一些多线程状态下,对象资源的释放时机常常不好把握,导致了各种各样的问题。为什么大家喜欢用带有GC功能的语言做开发,是因为少了太多的心智负担(JAVA, C#, Python ...)。 2.C++下的资源管理方式 2.1 针对原生指针的资源管理 针对原生指针的管理方式,学校老师常常这么教:谁创建、谁释放。要配对,不过现实往往没那么理想,在单线程处理程序中这样没有问题,但是在多线程中有时候做不到。我现在通常的做法是做一个簿记工作,对于系统中大量使用的对象资源,尤其是跨线程使用的,会集中管理登记,并配以状态标记,确认对象使用完毕后再行释放。对象自身跟随业务状态变化,有明确的开始和结束状态。 2.2 通过智能指针进行资源管理 在C++ 中有多种类型的智能指针,有些被重用,而有些却被放弃,在陈硕的《Linux多线程服务端编程》中,推荐使用shared_ptr以及weak_ptr进行资源管理。此处梳理一下C++中的智能指针。看看各自如何使用,适合在什么场景下使用。 2.2.1 unique_ptr unique