scoped_ptr 与auto_ptr 区别
2012-10-18 16:13
190 查看
scoped_ptr 与auto_ptr 都是简单的智能指针,能够保证在离开作用域后对象被自动释放。
原理都很相似:
都是利用一个栈上的对象来管理一个堆上的对象,从而使得堆上的对象随着栈上的对象销毁而
自动删除。
不同的地方在于:
1.scoped_str不能拷贝,不能转让所管理对象的所有权,而auto_ptr可以,
也就是说,scoped_str对象是不能作为函数的返回值的,而auto_ptr可以。
(现实原理就是:
1.重载赋值操作符,使其为私有来禁止赋值,
2.把拷贝构造函数设置为私有来禁止拷贝)
相同点:
1. 不能共享所有权,即不能用于STL的容器中;(而shared_ptr 智能指针可以共享权限)
2. 不能用于管理数组对象
由于scoped_ptr是通过delete来删除所管理对象的,而数组对象必须通过deletep[]来删除,
因此,scoped_ptr是不能管理数组对象的,如果要管理数组对象需要使用boost::scoped_array类。
原理都很相似:
都是利用一个栈上的对象来管理一个堆上的对象,从而使得堆上的对象随着栈上的对象销毁而
自动删除。
不同的地方在于:
1.scoped_str不能拷贝,不能转让所管理对象的所有权,而auto_ptr可以,
也就是说,scoped_str对象是不能作为函数的返回值的,而auto_ptr可以。
(现实原理就是:
1.重载赋值操作符,使其为私有来禁止赋值,
2.把拷贝构造函数设置为私有来禁止拷贝)
相同点:
1. 不能共享所有权,即不能用于STL的容器中;(而shared_ptr 智能指针可以共享权限)
2. 不能用于管理数组对象
由于scoped_ptr是通过delete来删除所管理对象的,而数组对象必须通过deletep[]来删除,
因此,scoped_ptr是不能管理数组对象的,如果要管理数组对象需要使用boost::scoped_array类。
相关文章推荐
- C/C++: std::auto_ptr 与 boost:: scoped_ptr 区别
- scoped_ptr和auto_ptr的主要区别
- scoped_ptr 与 auto_ptr 与 shared_ptr 区别总结
- BOOST之scoped_ptr源码及与auto_ptr的区别
- boost准模板库scoped_ptr指针的使用以及auto_ptr智能指针的对比
- boost之scoped_ptr和auto_ptr
- auto_ptr and scoped_ptr
- 【牛客 题库】 gets()和scanf()函数的区别 || 智能指针auto_ptr
- auto_ptr 与 shared_ptr 用法和区别总结
- boost准模板库scoped_ptr指针的使用以及auto_ptr智能指针的对照
- auto_ptr、shared_ptr、weak_ptr、scoped_ptr用法小结
- C++学习之智能指针--auto_ptr、scoped_ptr、scoped_array、shared_ptr、shared_array、weak_ptr
- 智能指针(auto_ptr,scoped_ptr,shared_ptr)
- 智能指针shared_ptr, auto_ptr, scoped_ptr, weak_ptr总结
- C++智能指针剖析(上)std::auto_ptr与boost::scoped_ptr
- boost库:智能指针(auto_ptr、scoped_ptr、shared_ptr)浅谈
- C++垃圾回收器的实现(附auto_ptr 与CComPtr区别)
- auto_ptr、shared_ptr、weak_ptr、scoped_ptr用法小结
- auto_ptr、shared_ptr、weak_ptr、scoped_ptr用法小结
- auto_ptr,shared_ptr,weak_ptr,scoped_ptr