Avviso del compilatore (livello 3) C4823
'function': usa puntatori di blocco, ma la semantica di rimozione non è abilitata. Prendere in considerazione l'uso di /EHa
Per rimuovere un oggetto nell'heap gestito a cui punta un puntatore di blocco dichiarato in un ambito di blocco, il compilatore simula il comportamento dei distruttori delle classi locali, "pretendendo" che il puntatore di blocco abbia un distruttore che nullifica il puntatore. Per abilitare una chiamata a un distruttore dopo aver generato un'eccezione, è necessario abilitare la rimozione degli oggetti, operazione che è possibile eseguire usando /EHsc.
È anche possibile rimuovere manualmente l'oggetto e ignorare l'avviso.
Esempio
L'esempio seguente genera l'errore 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 );
}