Поделиться через


Предупреждение компилятора (уровень 3) C4823

Функция: использует указатели на закрепление, но семантика очистки не включена. Рассмотрите возможность использования /EHa

Чтобы открепить объект в управляемой куче, на которую указывает указатель на закрепление, объявленный в блоке область, компилятор имитирует поведение деструкторов локальных классов, "притворяющийся" указатель на закрепление имеет деструктор, который nullифицирует указатель. Чтобы включить вызов деструктора после создания исключения, необходимо включить очистку объекта, который можно сделать с помощью /EHsc.

Вы также можете вручную открепить объект и игнорировать предупреждение.

Пример

В следующем примере возникает ошибка 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 );
}