智能指针(c++)

本文介绍了C++中的资源获取初始化(RAII)原则,并详细讨论了智能指针,包括RALL的原理、智能指针解决的问题、C++11中的四个智能指针(auto_ptr、unique_ptr、shared_ptr、weak_ptr)以及它们的特点。特别提到了unique_ptr的优势,如独占所有权、动态数组管理,并举例说明了如何用智能指针对文件指针进行管理。
摘要由CSDN通过智能技术生成

RALL是什么

RALL为资源获取初始化,使用局部对象向来管理资源的技术称为资源获取即初始化

这里的内存资源主要是指操作系统中有限的东西比如:内存,网络套接字,互斥量,文件句柄等等,局部对象是由操作系统来管理的无需人工介入.

1 RALL的原理

资源的使用一般经历三个步骤

获取资源(创建对象)

使用资源

销毁资源(析构对象)

什么是智能指针,裸指针存在的问题

智能指针是比原始指针更智能的类,解决悬空指针或者多次删除被指向对象,以及资源泄漏的问题,通常用来确保指针的寿命和对象的寿命一致

裸指针存在很多问题

1难以区分指向的是单个对象还是一个数组

2使用完指针后无法判断是否应该销毁指针,因为指针无法判断是否拥有的对象

3在已经确定需要销毁指针的情况下,也无法确定是用delete关键字删除,还是有其他特殊的销毁机制,例如通过将指针传入某个特定的销毁函数来摧毁指针
4即使已经确定了销毁指针的方法,由于1的原因,仍然无法确定到底是i用delete(销毁单个对象)还是delete[](销毁一个数组)
5 假设上述的问题都解决了,也很难保证在代码的所有路径中(分支结构,异常导致的挑战),有且仅有一次销毁指针的操作;任何一条路径遗漏都可能导致内存的泄露,而销毁多次则会导致未定义行为
6 理论上没有方法来分辨一个指针是否处于悬挂状态
 

c11 四个智能指针 :

auto_ptr ,unique_ptr,shared_ptr,weak_ptr

为什么auto_ptr会被弃用

class Object
{
	int value;
public:
	Obje
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值