[转] 为何C 不提供“finally”结构? - C 风格与技术 FAQ - 蚂蚁...
来源:百度文库 编辑:神马文学网 时间:2024/04/29 11:23:26
Q:
A: 因为C++提供了另一种机制,完全可以取代finally,而且这种机制几乎总要比finally工作得更好:就是——“分配资源即初始化”。(见《The C++ Programming Language》14.4节)基本的想法是,用一个局部对象来封装一个资源,这样一来局部对象的析构函数就可以自动释放资源。这样,程序员就不会“忘记释放资源”了。 [译注:因为C++的对象“生命周期”机制替他记住了 :O) ] 下面是一个例子:
class File_handle {FILE* p;public:File_handle(const char* n, const char* a){ p = fopen(n,a); if (p==0) throw Open_error(errno); }File_handle(FILE* pp){ p = pp; if (p==0) throw Open_error(errno); }~File_handle() { fclose(p); }operator FILE*() { return p; }// ...};void f(const char* fn){File_handle f(fn,"rw"); // open fn for reading and writing// use file through f}
在一个系统中,每一样资源都需要一个“资源局柄”对象,但我们不必为每一个资源都写一个“finally”语句。在实作的系统中,资源的获取和释放的次数远远多于资源的种类,所以“资源分配即初始化”机制产生的代码要比“finally”机制少。
[译注:Object Pascal,Java,C#等语言都有finally语句块,常用于发生异常时对被分配资源的资源的处理——这意味着有多少次分配资源就有多少finally语句块(少了一个finally就意味着有一些资源分配不是“exception safe”的);而“资源分配即初始化”机制将原本放在finally块中的代码移到了类的析构函数中。我们只需为每一类资源提供一个封装类即可。需代码量孰多孰少?除非你的系统中每一类资源都只被使用一次——这种情况下代码量是相等的;否则永远是前者多于后者 :O) ]
另外,请看看《The C++ Programming Language》附录E中的资源管理例子。
A: 因为C++提供了另一种机制,完全可以取代finally,而且这种机制几乎总要比finally工作得更好:就是——“分配资源即初始化”。(见《The C++ Programming Language》14.4节)基本的想法是,用一个局部对象来封装一个资源,这样一来局部对象的析构函数就可以自动释放资源。这样,程序员就不会“忘记释放资源”了。 [译注:因为C++的对象“生命周期”机制替他记住了 :O) ] 下面是一个例子:
class File_handle {FILE* p;public:File_handle(const char* n, const char* a){ p = fopen(n,a); if (p==0) throw Open_error(errno); }File_handle(FILE* pp){ p = pp; if (p==0) throw Open_error(errno); }~File_handle() { fclose(p); }operator FILE*() { return p; }// ...};void f(const char* fn){File_handle f(fn,"rw"); // open fn for reading and writing// use file through f}
在一个系统中,每一样资源都需要一个“资源局柄”对象,但我们不必为每一个资源都写一个“finally”语句。在实作的系统中,资源的获取和释放的次数远远多于资源的种类,所以“资源分配即初始化”机制产生的代码要比“finally”机制少。
[译注:Object Pascal,Java,C#等语言都有finally语句块,常用于发生异常时对被分配资源的资源的处理——这意味着有多少次分配资源就有多少finally语句块(少了一个finally就意味着有一些资源分配不是“exception safe”的);而“资源分配即初始化”机制将原本放在finally块中的代码移到了类的析构函数中。我们只需为每一类资源提供一个封装类即可。需代码量孰多孰少?除非你的系统中每一类资源都只被使用一次——这种情况下代码量是相等的;否则永远是前者多于后者 :O) ]
另外,请看看《The C++ Programming Language》附录E中的资源管理例子。
[转] 为何C 不提供“finally”结构? - C 风格与技术 FAQ - 蚂蚁...
A Visual C Exception FAQ
[原创]vc 6中的结构化异常处理try-except-finally语句 - VC 论坛 - C 论坛 - 编程论坛
[32] How to mix C and C , C FAQ Lite
内存对齐与ANIS C中结构体的内存分配 - 软件开发网 - 提供编程开发资料的编程网
c语言的编程风格
[17] Exceptions and error handling, C FAQ Lite
驱赶蚊子、蚂蚁、蟑螂的妙法c
彻底理解C、C++、WIN32与COM中的字符串 - 镜花水月 - JavaEye技术网站
结构体的位定义? - C/C++ - IXPUB技术社区 - IT168旗下网站
何克抗《教育技术学》笔记与答案C
AVR c语言优秀编程风格
AVR c语言优秀编程风格
C/C 中结构体(struct)知识点强化2
C/C 中结构体(struct)知识点强化2
短线炒股技术集锦c
aps-c 与全副
内存对齐与ANIS C中结构体的内存分配
结构体与函数指针的特殊应用-如何在c语言中实现多态
一道IBM笔试题,关于结构体sizeof。 C/C / C语言
为什么说B/S结构优于C/S结构
白话C#:反射-.NET技术-dotnet技术
gzip压缩算法 - c/c - CSDN技术中心
C中所有运算符的优先级别记忆 C/C 开源技术网论坛