scoped_ptr 与auto_ptr 区别

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类。

你可能感兴趣的:(delete)