为什么C++不提供“finally”的构造?
因为C++提供了另外一种方法,它几乎总是更好的:“资源获得即初始化”(resource acquisiton is initialization)技术。基本的思路是,通过一个局部对象来表现资源,于是局部对象的析构函数将会释放资源。这样,程序员就不会忘记释放资源了。举例来说:
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"); //打开fn进行读写
// 通过f使用文件
}
在一个系统中,需要为每一个资源都使用一个“资源句柄”类。无论如何,我们不需要为每一个资源获得都写出“finally”语句。在实时系统中,资源获得要远远多于资源的种类,因此和使用“finally”构造相比,“资源获得即初始化”技术会产生少得多的代码。
什么是自动指针(auto_ptr),为什么没有自动数组(auto_array)?
文章来源于领测软件测试网 https://www.ltesting.net/