今天学习了Effective C++ 中的term13,现在记录一下我的学习理解笔记
首先,这里所谓的资源,即是你一旦用了它,将来就必须还给操作系统,如果不这样,就会发生内存泄漏C++中最常用的资源就是动态分配内存(如果你分配内存却从来不曾归还给它,会导致内存泄露),但是内存知识你必须管理的众多的资源之一。但是不论哪一种资源,重要的是,当你不再使用它时,必须将它还给操作系统。
那么因此,我们就需要遵守term13所说的,用对象来管理资源,其实本质上就是让你去用智能指针去管理资源了。这里term13讲述了auto_ptr还有shared_ptr,并且在最后给予我们读者一个简易,那就是尽量使用shared_prt(我认为还可以尽量使用unique_ptr)来do内存管理,因为他们都能够自动在其所指对象离开作用域时自动调用对应类的构造函数去释放这些在heap堆区开辟的内存,也比较robust。
具体的书上的内容这里不再赘述,当然,以下两条term13的重要结论需要你记住:
一、为了防止资源的泄露,请使用智能指针,它们在构造函数中获得资源并在析构函数中释放资源
二、两个常常被使用的智能指针是auto_ptr还有shared_ptr,但是auto_ptr在复制动作时会使得(被复制的那个对象指针)指向NULL,这并不是我们想要的,因为这样就不能让该类的对象进行正常的复制copy assignment行为了(比如STL中的容器就要求其容器发挥正常的复制行为,因此对于STL中的容器你不可以用auto_ptr来管理资源,用shared_ptr可以),而shared_ptr就是一个较佳的选择,因为其copy行为比较直观,也属于正常的复制行为
参考:
Effective C++ 之条款13