Share via


Upozornění kompilátoru (úroveň 3) C4823

'function' : používá připnutí ukazatelů, ale sémantiku odvíjení nejsou povoleny. Zvažte použití /EHa

Chcete-li odepnout objekt na spravované haldě odkazující na připnutí ukazatele deklarovaného v oboru bloku, kompilátor simuluje chování destruktorů místních tříd, "předstírat" připnutí ukazatele má destruktor, který zruší hodnotu ukazatele. Chcete-li povolit volání destruktoru po vyvolání výjimky, musíte povolit odvíjení objektu, který můžete provést pomocí /EHsc.

Objekt můžete také ručně odepnout a upozornění ignorovat.

Příklad

Následující ukázka vygeneruje 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 );
}