清除資源
在終止處理常式執行期間,您可能不知道在呼叫終止處理常式之前實際配置了哪些資源。 有可能在配置所有資源之前,__try 陳述式區塊就已中斷,此時並非所有資源皆已開啟。
因此,為了安全起見,您應該先檢查哪些資源已實際開啟,再繼續進行終止處理的清除作業。 建議的程序是:
將控制代碼初始化為 NULL。
在 __try 陳述式區塊中配置資源。 資源一配置,控制代碼就會設定為正值。
在 __finally 陳述式區塊中,釋放對應控制代碼或旗標變數為非零或非 NULL 的每個資源。
範例
例如,下列程式碼會使用終止處理常式關閉三個檔案和一個在 __try 陳述式區塊中配置的記憶體區塊。 在清除資源之前,程式碼會先檢查資源是否已配置。
// exceptions_Cleaning_up_Resources.cpp
#include <stdlib.h>
#include <malloc.h>
#include <stdio.h>
#include <windows.h>
void fileOps() {
FILE *fp1 = NULL,
*fp2 = NULL,
*fp3 = NULL;
LPVOID lpvoid = NULL;
errno_t err;
__try {
lpvoid = malloc( BUFSIZ );
err = fopen_s(&fp1, "ADDRESS.DAT", "w+" );
err = fopen_s(&fp2, "NAMES.DAT", "w+" );
err = fopen_s(&fp3, "CARS.DAT", "w+" );
}
__finally {
if ( fp1 )
fclose( fp1 );
if ( fp2 )
fclose( fp2 );
if ( fp3 )
fclose( fp3 );
if ( lpvoid )
free( lpvoid );
}
}
int main() {
fileOps();
}