Bagikan melalui


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