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