c++资源管理之四-----RAII
资源就是一旦使用了它,将来必须还给系统。如果不这样,糟糕的事情就会发生。C++程序中最长使用的资源是动态分配内存。但内存只是你必须管理的众多资源之一。其他的资源还包括文件描述器(file description)、互斥锁(mutex locks)、图形界面中的字形和笔刷、数据库连接以及网络socket。不论那一种资源,重要的是,当你不再使用时,必须将它还给系统。
c++资源管理就是保证资源得到正确的分配和释放。即使发生异常,也使得已分配的内存得到正确的释放。把资源放进对象内,我们可以依赖c++的“析构函数自动调用机制”确保资源被释放。通过定义一个类来封装资源的分配和释放,可以保证正确的释放资源。这一技术常称为"资源分配即初始化",简称RAII。
RAII有两个关键的想法:
1).获得资源后立刻放进管理对象内。我们几乎总是在获得一笔资源后于同一语句内以初始化某个管理对象,有时获得的资源被拿来赋值某个管理对象,但不论那一种做法,每一笔资源都在获得的同时立刻被放进管理对象中。
2).管理对象运用析构函数确保资源的释放。不管控制流如何离开区块,一旦对象被销毁其析构函数自然会被自动调用,于是资源被释放。
两个常被使用的RAII classes分别是trl::shared_ptr和auto_ptr。auto_ptr和trl::shared_ptr两者在析构函数内部做delete而不是delete[]操作。
RAII class 中需要注意的几个地方:
1.在RAII class中小心copying行为。"当一个RAII 对象被复制,会发生什么事情??"有四种可能:
<