Partager via


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

Remarques

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