C6242
Upozornění C6242: Přechod z tohoto bloku try vynutí místní uvolnění.Způsobuje ztráty výkonu
Toto upozornění znamená, že příkaz skoku způsobí opuštění chráněného blok try-finally tokem řízení jinak než předáním řízení.
Opuštění chráněného bloku try-finally jinak než předáním řízení z posledního příkazu vyžaduje místní uvolnění.Místní uvolnění obvykle vyžaduje přibližně 1000 strojových instrukcí počítače; proto způsobuje ztráty výkonu.
K opuštění chráněného bloku try-finally lze použít klíčové slovo _leave.
Příklad
Následující kód generuje toto upozornění:
#include <malloc.h>
void DoSomething(char *p); // function can throw exception
int f( )
{
char *ptr = 0;
__try
{
ptr = (char*) malloc(10);
if ( !ptr )
{
return 0; //Warning: 6242
}
DoSomething( ptr );
}
__finally
{
free( ptr );
}
return 1;
}
Chcete-li opravit toto upozornění, použijte klíčové slovo __leave, jak je znázorněno v následujícím kódu:
#include <malloc.h>
void DoSomething(char *p);
int f()
{
char *ptr = 0;
int retVal = 0;
__try
{
ptr = (char *) malloc(10);
if ( !ptr )
{
retVal = 0;
__leave; //No warning
}
DoSomething( ptr );
retVal = 1;
}
__finally
{
free( ptr );
}
return retVal;
}
Použití malloc a free má mnoho nástrah v podobě nevracení paměti a výjimek.Chcete-li zabránit těmto druhům problémů úniky a výjimkami zcela, použijte mechanismy, které jsou k dispozici v knihovně C++ STL.Patří mezi ně shared_ptr, unique_ptr a vector.Další informace naleznete v tématu Chytré ukazatele (moderní verze jazyka C++) a Standardní knihovna C++ – referenční dokumentace.