首页 > 编程知识 正文

raii和智能指针

时间:2023-05-04 18:58:19 阅读:229720 作者:2463

RAII机制

RAII的本质内容是用对象代表资源,把管理资源的任务转化为管理对象的任务,将资源的获取和释放与对象的构造和析构对应起来,从而确保在对象的生存期内资源始终有效,对象销毁时资源一定会被释放。说白了,就是拥有了对象,就拥有了资源,对象在,资源则在。所以,RAII机制是进行资源管理的有力武器,C++程序员依靠RAII写出的代码不仅简洁优雅,而且做到了异常安全。

特点

在栈语义和操作符重载的支持下,C++ RAII体现出了简洁、安全、实时的特点:
1.概念简洁性:让资源(包括内存和非内存资源)和对象的生命周期绑定,资源类的设计者只需用在类定义内部处理资源问题,提高了程序的可维护性
2.类型安全性:通过资源代理对象包装资源(指针变量),并利用运算符重载提供指针运算方便使用,但对外暴露类型安全的接口
3.异常安全性:栈语义保证对象析构函数的调用,提高了程序的健壮性
4.释放实时性:和GC相比,RAII达到了和手动释放资源一样的实时性,因此可以承担底层开发的重任

智能指针

除了静态内存和栈内存,每个程序还拥有一个内存池。这部分内存称为自由空间或者。使用动态生存期的资源类:
1、程序不知道自己需要使用多少对象
2、程序不知道所需对象的准确类型
3、程序需要在多个对象间共享数据

shared_ptr

我们可以认为每个shared_ptr都有一个关联的计数器,通常称其为引用计数器。无论何时我们拷贝一个shared_ptr,计数器都会递增。

unique_ptr

一个unique拥有它指向的对象,某个时刻只能有一个unique_ptr指向一个给定的对象。初始化unique_ptr必须使用直接初始化方式。

weak_ptr

是一种不控制所指向对象生存期的智能指针,它指向一个由shared_ptr管理的对象,将一个weak_ptr绑定一个shared_ptr,不改变计数。一旦最后一个shared_ptr被销毁,对象就会被释放。即使weak_ptr指向对象,对象依然会被销毁。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。