Čištění zdroje
Při ukončení rutiny provádění neznáte prostředků, které jsou skutečně přidělených před popisovač ukončení bylo voláno.Je možné, že __try bloku byla přerušena před všechny prostředky byly přiděleny, tak, aby byly otevřeny všechny prostředky.
Chcete-li být bezpečný, by zaškrtnete tedy prostředků, které jsou skutečně otevřené před pokračováním vyčištění ukončení zpracování.Doporučený postup je:
Inicializace popisovače na hodnotu NULL.
V __try příkaz blokovat, přidělení zdrojů.Úchyty jsou nastaveny na kladné hodnoty jako zdroj je přidělen.
V __finally blok příkazu uvolnit každý zdroj, jehož odpovídající popisovač nebo proměnnou příznak není nula nebo not NULL.
Příklad
Například následující kód používá ukončení rutiny zavřete tři soubory a blok paměti, které byly přiděleny v __try bloku.Před čištění zdroje, kód nejprve zkontroluje Pokud prostředek byl přidělen.
// 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();
}