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