리소스 정리
종료 처리기를 실행 하는 동안 여 종료 처리기를 호출 하기 전에 어떤 자원이 실제로 할당 된 알 수 없습니다.것에 __try 문 블록 모든 열린 된 있도록 중단 했습니다 모든 리소스 할당 된 전에.
따라서 안전 하 게 하려면 실제로 종료 처리 정리를 계속 하기 전에 열려 있는 리소스를 참조 하십시오 확인 해야 합니다.권장 되는 절차는 다음과 같습니다.
핸들을 NULL로 초기화 합니다.
에 __try 문 블록에서 리소스를 할당 합니다.리소스를 할당 핸들 양수 값으로 설정 됩니다.
에 있는 __finally 문 블록을 가진 해당 핸들 또는 플래그 변수는 0이 아닌 각 리소스 해제 또는 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();
}