建議使用 Visual Studio 2017

C6242

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

警告 C6242: 跳出此 try 區塊會強制區域回溯, 而對效能帶來嚴重的負面影響

這則警告表示跳躍陳述式 (Jump Statement) 會造成控制流程離開 try-finally 的保護區塊,而不是利用 fall-through。

離開 try-finally 的保護區塊 (而不是利用 fall-through) 需強制發生區域回溯。 區域回溯通常需要大約 1000 個機器指令,因此對效能而言是非常不利的。

使用 _leave 離開 try-finally 的保護區塊。

下列程式碼將產生出這個警告:

#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;  
}  

若要更正這則警告,請使用 __leave,如下列程式碼所示:

#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;  
}  

就記憶體遺漏和例外狀況而言, malloc 和 free 的使用上有很多缺點。 若要避免這類遺漏和例外狀況的問題,請使用 C++ Standard Template Library (STL) 提供的機制。 其中包括 shared_ptrunique_ptrvector。 如需詳細資訊,請參閱智慧型指標C++ Standard Library

try-finally 陳述式

顯示: