Boost 学习(一) scoped_ptr
2013-04-18 11:56
141 查看
scoped_ptr :
使用裸指针来写异常安全和无错误的代码是很复杂的。使用智能指针来自动地把动态分配对象的生存期限制在一个明确的范围之内,是解决这种问题的一个有效的方法,并且提高了代码的可读性、可维护性和质量。scoped_ptr 明确地表示被指物不能被共享和转移。正如你所看到的,std::auto_ptr可以从另一个auto_ptr那里窃取被指物,那怕是无意的,这被认为是auto_ptr的最大的缺点。正是这个缺点使得scoped_ptr成为auto_ptr最好的补充。当一个动态分配的对象被传送给scoped_ptr,
它就成为了这个对象的唯一的拥有者。因为scoped_ptr几乎总是以自动变量或数据成员来分配的,因此它可以在离开作用域时正确地销毁,从而在执行流由于返回语句或异常抛出而离开作用域时,总能释放它所管理的内存。
在以下情况时使用 scoped_ptr :
在可能有异常抛出的作用域里使用指针
函数里有几条控制路径
动态分配对象的生存期应被限制于特定的作用域内
异常安全非常重要时(始终如此!)
scoped_ptr 相当于局部变量。
auot_ptr 赋值给另一个auto_ptr 后内容丢失。
更详细的介绍:
http://blog.sina.com.cn/s/blog_5d8cc3e10100vgkl.html
使用裸指针来写异常安全和无错误的代码是很复杂的。使用智能指针来自动地把动态分配对象的生存期限制在一个明确的范围之内,是解决这种问题的一个有效的方法,并且提高了代码的可读性、可维护性和质量。scoped_ptr 明确地表示被指物不能被共享和转移。正如你所看到的,std::auto_ptr可以从另一个auto_ptr那里窃取被指物,那怕是无意的,这被认为是auto_ptr的最大的缺点。正是这个缺点使得scoped_ptr成为auto_ptr最好的补充。当一个动态分配的对象被传送给scoped_ptr,
它就成为了这个对象的唯一的拥有者。因为scoped_ptr几乎总是以自动变量或数据成员来分配的,因此它可以在离开作用域时正确地销毁,从而在执行流由于返回语句或异常抛出而离开作用域时,总能释放它所管理的内存。
在以下情况时使用 scoped_ptr :
在可能有异常抛出的作用域里使用指针
函数里有几条控制路径
动态分配对象的生存期应被限制于特定的作用域内
异常安全非常重要时(始终如此!)
scoped_ptr 相当于局部变量。
auot_ptr 赋值给另一个auto_ptr 后内容丢失。
更详细的介绍:
http://blog.sina.com.cn/s/blog_5d8cc3e10100vgkl.html
相关文章推荐
- 学习笔记四:boost智能指针:scoped_ptr和shared_ptr
- boost学习scoped_ptr,shared_ptr
- Boost源码学习---scoped_ptr.hpp
- Boost学习笔记----SmartPointer之Boost::scoped_ptr
- Boost学习笔记----SmartPointer之Boost::scoped_ptr
- C++学习 boost学习之-scoped_ptr
- boost学习之-scoped_ptr
- Boost学习--再窥shared_ptr
- boost.smart_ptr-智能指针scoped_array
- c++智能指针:boost::scoped_ptr,boost::shared_ptr,boost::scoped_array
- 智能指针Boost.smart_ptr学习3--scoped_array
- [置顶] 从零开始学C++之boost库(一):详解 boost 库智能指针(scoped_ptr<T> 、shared_ptr<T> 、weak_ptr<T> 源码分析)
- 【Boost】boost库中智能指针——scoped_ptr
- boost :: scoped_ptr的和std ::的unique_ptr的区别
- boost学习之-scoped_array
- boost.smart_ptr-智能指针scoped_array
- C++ boost scoped_ptr
- boost::share_ptr学习笔记
- Chrome源码学习之scoped_ptr
- 作用域指针 boost::scoped_ptr