為什么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)?
文章來源于領測軟件測試網 http://www.kjueaiud.com/