Compiler Warning (level 3) C4823
'function' : menggunakan penunjuk penyematan tetapi semantik unwind tidak diaktifkan. Pertimbangkan untuk menggunakan /EHa
Untuk melepaskan semat objek pada tumpukan terkelola yang ditunjukkan oleh penunjuk penyematan yang dideklarasikan dalam cakupan blok, kompilator mensimulasikan perilaku destruktor kelas lokal, "berpura-pura" penunjuk penyematan memiliki destruktor yang meniru pointer. Untuk mengaktifkan panggilan ke destruktor setelah melemparkan pengecualian, Anda harus mengaktifkan pelepasan objek, yang dapat Anda lakukan dengan menggunakan /EHsc.
Anda juga dapat melepas sematan objek secara manual dan mengabaikan peringatan.
Contoh
Sampel berikut menghasilkan 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 );
}