scoped_ptr 与auto_ptr 区别

本文详细解析了scoped_ptr与auto_ptr这两种简单智能指针的原理与特性,包括它们的作用域、所有权转移、不能用于STL容器和数组管理等方面的不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值