浅谈RAII和典型应用auto_ptr

RAII (Resource Acquisition Is Initialization), 是一种资源管理技术。简单来说,RAII 就是把资源的得到和对象的初始化联系在一块儿,这使得资源分配成为局部对象声明周期的一部分,从而使得资源的分配具备原子性。函数

好比说,封装一个指针,在Constructor中得到资源,在Destructor中释放资源。那么,当程序某处发生异常,大体栈反解(stack unwinding)时,已经分配的资源就伴随着局部对象的消亡(系统调用析构函数)而被恰当的清理掉。ui

一个典型的RAII封装就是auto_ptr。如下,对auto_ptr 进行一个归纳和分析。详细的讲解,能够参考“Using auto_ptr Effectively" 这篇文章。http://www.gotw.ca/publications/using_auto_ptr_effectively.htm设计

auto_ptr最重要的特性: For auto_ptr, copies are not equivalent.指针

这种突破常规的思惟方式和设计方案,使得auto_ptr具备本身特定的优点。auto_ptr特别适合处理一下模型。htm

Source() -----------------------> Sink() 对象

Source()产生资源而且撒手无论了, Sink()接管资源全部权而且进行处理和释放。资源

除此以外,有三点须要注意。it

1. 不要将auto_ptr放在容器中处理。 (固然,如今auto_ptr的模板已经设计的尽可能阻止用户这么干了)。io

2. 能够声明一个const auto_ptr,那么它的资源全部权不会被转让,这意味着它不能被拷贝或者赋值。模板

3. 相似于auto_ptr的智能指针,有时候对于编写exception-safe的代码相当重要。

相关文章
相关标签/搜索