清除資源
在終止處理常式執行期間,您可能不知道哪些資源實際配置之前呼叫終止處理常式。 可能的__try陳述式區塊前被中斷所有的資源配置,以便開啟不是所有的資源。
因此,為了安全起見,您應該檢查以查看哪些資源是實際開啟前終止處理清除。 建議的程序是:
初始化為 NULL 的控點。
在__try陳述式區塊、 配置資源。 控點是設定用於正數值,如配置資源。
在__finally陳述式區塊,釋放每項資源,其相對應的控制代碼或旗標變數不是零,或 not 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();
}