Freigeben über


Compilerwarnung (Ebene 3) C4823

'Funktion': Verwendet Anheftungszeiger, die Semantik wird jedoch nicht aktiviert. Erwägen Sie die Verwendung von /EHa

Um ein Objekt auf den verwalteten Heap zu lösen, auf den ein in einem Blockbereich deklarierter Pinningzeiger verweist, simuliert der Compiler das Verhalten von Destruktoren lokaler Klassen, "vorgeben", dass der Anheftzeiger über einen Destruktor verfügt, der den Zeiger nullifiziert. Um einen Aufruf eines Destruktors nach dem Auslösen einer Ausnahme zu aktivieren, müssen Sie die Objektaussetzung aktivieren, die Sie mithilfe von /EHsc ausführen können.

Sie können das Objekt auch manuell lösen und die Warnung ignorieren.

Beispiel

Im folgenden Beispiel wird C4823 generiert.

// 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 );
}