分享方式:


編譯器警告 (層級 3) C4823

'function' :使用釘選指標,但未啟用回溯語意。 請考慮使用 /EHa

若要取消釘選指標在區塊範圍中宣告之 Managed 堆積上的物件,編譯器會模擬本機類別解構函式的行為,「假裝」釘選指標具有解構函式,以 Null 化指標。 若要在擲回例外狀況之後啟用對解構函式的呼叫,您必須啟用物件回溯,您可以使用 /EHsc 來執行此動作

您也可以手動取消釘選物件,並忽略警告。

範例

下列範例會產生 C4823。

// C4823.cpp
// compile with: /clr /W3 /EHa-
using namespace System;

ref struct G {
   int m;
};

void f(G ^ pG) {
   try {
      pin_ptr<int> p = &pG->m;
      // manually unpin, ignore warning
      // p = nullptr;
      throw gcnew Exception;
   }
   catch(Exception ^) {}
}   // C4823 warning

int main() {
   f( gcnew G );
}