Предупреждение компилятора (уровень 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 );
}
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по