c++资源管理-----RAII

本文详细介绍了C++中的资源管理策略RAII,包括RAII的概念、作用,以及如何通过析构函数确保资源的正确释放。讨论了RAII类在复制行为、原始资源访问、delete操作和智能指针使用时的注意事项,强调了独立语句分配资源到智能指针以防止内存泄漏的重要性。

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

c++资源管理之四-----RAII

         资源就是一旦使用了它,将来必须还给系统。如果不这样,糟糕的事情就会发生。C++程序中最长使用的资源是动态分配内存。但内存只是你必须管理的众多资源之一。其他的资源还包括文件描述器(file description)、互斥锁(mutex locks)、图形界面中的字形和笔刷、数据库连接以及网络socket。不论那一种资源,重要的是,当你不再使用时,必须将它还给系统。

        c++资源管理就是保证资源得到正确的分配和释放。即使发生异常,也使得已分配的内存得到正确的释放。把资源放进对象内,我们可以依赖c++的“析构函数自动调用机制”确保资源被释放。通过定义一个类来封装资源的分配和释放,可以保证正确的释放资源。这一技术常称为"资源分配即初始化",简称RAII。

        RAII有两个关键的想法:

1).获得资源后立刻放进管理对象内。我们几乎总是在获得一笔资源后于同一语句内以初始化某个管理对象,有时获得的资源被拿来赋值某个管理对象,但不论那一种做法,每一笔资源都在获得的同时立刻被放进管理对象中。

2).管理对象运用析构函数确保资源的释放。不管控制流如何离开区块,一旦对象被销毁其析构函数自然会被自动调用,于是资源被释放。

       两个常被使用的RAII classes分别是trl::shared_ptr和auto_ptr。auto_ptr和trl::shared_ptr两者在析构函数内部做delete而不是delete[]操作。

      RAII class 中需要注意的几个地方:

1.在RAII class中小心copying行为。"当一个RAII 对象被复制,会发生什么事情??"有四种可能:

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值