Partilhar via


Aviso do compilador (nível 3) C4823

'function': usa ponteiros de fixação, mas a semântica de desenrolamento não está habilitada. Considere usar /EHa

Para desafixar um objeto no heap gerenciado apontado por um ponteiro de fixação declarado em um escopo de bloco, o compilador simula o comportamento de destruidores de classes locais, "fingindo" que o ponteiro de fixação tem um destruidor que anula o ponteiro. Para habilitar uma chamada a um destruidor depois de lançar uma exceção, você deve habilitar o desenrolamento de objeto, o que pode ser feito usando /EHsc.

Você também pode desafixar manualmente o objeto e ignorar o aviso.

Exemplo

O exemplo a seguir gera o erro 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 );
}