コンパイラの警告 (レベル 3) C4823

'function': ピンされたポインターを使用していますが、アンワインド セマンティクスは有効にはなりません。 /EHa を使用してください

ブロック スコープで宣言された固定ポインターが指し示すマネージド ヒープ上のオブジェクトの固定を解除するために、コンパイラはローカル クラスのデストラクターの動作をシミュレートし、ポインターを無効化するデストラクターが固定ポインターにあるように "見せかけ" ます。 例外をスローした後、デストラクターへの呼び出しを有効にするには、オブジェクトのアンワインドを有効にする必要があります。これは、/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 );
}