Avertissement du compilateur (niveau 3) C4823

'function' : utilise des pointeurs épinglants, mais la sémantique de déroulement n’est pas activée. Envisagez d’utiliser /EHa

Pour dissocier un objet sur le tas managé pointé par un pointeur d’épinglage déclaré dans une étendue de bloc, le compilateur simule le comportement des destructeurs des classes locales, « prétendant » que le pointeur d’épinglage a un destructeur qui nullifie le pointeur. Pour activer un appel à un destructeur après avoir levée une exception, vous devez activer le déroulement de l’objet, que vous pouvez effectuer à l’aide de /EHsc.

Vous pouvez également dissocier manuellement l’objet et ignorer l’avertissement.

Exemple

L’exemple suivant génère l’erreur 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 );
}