这是《Effective C++》中提到的第13个原则。
资源的管理这一主题从宏观上来讲就是你申请了资源,就一定要释放。你不释放会造成内存泄露,资源泄露,你释放多了有可能导致程序行为异常。所以简而言之就是你申请了多少个资源就释放多少个资源就行了。可是你在编程的过程难免会忘掉或者没有处理好资源释放的过程,那么本原则就是告诉你如何去控制资源的释放的。
作者的经验之谈就是以对象作为资源的载体进行传递以代替用单个语句去实现资源的管理过程。因为在这个过程中,程序流说不定就可能被return拐走,被作为异常抛出,被continue或者break跳过,当然还有那几乎被摒弃的goto语句等等,而没有到达delete。因为对象本身有构造函数和析构函数,而且它会在对象的生存期末尾自动调用析构函数来释放资源,从而不会造成资源泄露的情况。其实,我感觉此条款着重强调的是释放资源的重要性,但是它也强调在取得资源的时候马上就进行初始化。
而对于操纵对象作者又极力推荐了两种智能指针:auto_ptr,shared_ptr。这两个指针都会在资源使用结束后自动销毁它们,而不用你管。
auto_ptr的简单用法如下:
它有个特性,那就是一旦用这种指针指向某资源,那就不能有多个auto_ptr再去指向它了。如果已经有一个指针指向了某资源,你再用新指针指向这个指针的话,就指针就被自动设为NULL。
shared_ptr叫“引用计数型指针”,它与auto_ptr的不同之处在于它能记录到底有多少个对象指向某资源,但是它无法解决环状引用,就是两个没用的指针互指。
不过,一般情况下,智能指针里面装的都是一个函数,这个函数返回一个对象的引用,并完成该对象的初始化工作。
tr1::shared_ptr<Base> ptb(factory());
其中factory()函数负责初始化并返回管理资源的对象的引用。