C++中的健壮指针和资源管理
来源:互联网 发布:lua 源码在哪里 编辑:程序博客网 时间:2024/06/05 20:56
资源的定义是:任何在你的程序中获得并在此后释放的东西。
内存是一个相当明显的资源的例子。它需要用new来获得,用delete来释放。同时也有许多其它类型的资源文件句柄、重要的片断、Windows中的GDI资源,等等。将资源的概念推广到程序中创建、释放的所有对象也是十分方便的,无论对象是在堆中分配的还是在栈中或者是在全局作用于内生命的。
对于给定的资源的拥有着,是负责释放资源的一个对象或者是一段代码。所有权分立为两种级别——自动的和显式的(automatic and explicit),如果一个对象的释放是由语言本身的机制来保证的,这个对象的就是被自动地所有。例如,一个嵌入在其他对象中的对象,他的清除需要其他对象来在清除的时候保证。外面的对象被看作嵌入类的所有者。
类似地,每个在栈上创建的对象(作为自动变量)的释放(破坏)是在控制流离开了对象被定义的作用域的时候保证的。这种情况下,作用于被看作是对象的所有者。注意所有的自动所有权都是和语言的其他机制相容的,包括异常。无论是如何退出作用域的——正常流程控制退出、一个break语句、一个return、一个goto、或者是一个throw——自动资源都可以被清除。
到目前为止,一切都很好!问题是在引入指针、句柄和抽象的时候产生的。如果通过一个指针访问一个对象的话,比如对象在堆中分配,C++不自动地关注它的释放。程序员必须明确的用适当的程序方法来释放这些资源。比如说,如果一个对象是通过调用new来创建的,它需要用delete来回收。一个文件是用CreateFile(Win32 API)打开的,它需要用CloseHandle来关闭。用EnterCritialSection进入的临界区(Critical Section)需要LeaveCriticalSection退出,等等。一个"裸"指针,文件句柄,或者临界区状态没有所有者来确保它们的最终释放。基本的资源管理的前提就是确保每个资源都有他们的所有者。
- 【推荐】C++中的健壮指针和资源管理
- C++中的健壮指针和资源管理(1)
- C++中的健壮指针和资源管理(2)
- C++中的健壮指针和资源管理(3)
- C++中的健壮指针和资源管理
- C++中的健壮指针和资源管理
- C++中的资源管理(智能指针)
- C中的指针和数组
- C中的指针和数组
- C中的数组和指针
- rails中的健壮参数
- C和C++中的引用和指针
- [C++]资源管理
- 【C++】C++避坑经验谈:资源管理类、智能指针
- C 语言中的指针和内存泄漏
- C语言中的指针和内存泄漏
- C 语言中的指针和内存泄漏
- C语言中的指针和内存泄漏
- No rule to make target `missing-syscalls' 一句话解决办法
- 堆和栈的区别
- 有了malloc/free为什么还要new/delete?
- 指针与数组的对比
- c++合并排序算法
- C++中的健壮指针和资源管理
- 对于常用软件的N多想法!
- mov和movl 的区别
- 龙芯编译器指针分析移植 小记:
- 杜绝“野指针”
- undo表空间管理
- 集中式,分布式,协作式数据处理的区别
- Log4J的配置
- wince驱动开发一