コンパイラの警告 (レベル 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 );
}