컴파일러 경고(수준 3) C4823
'function': 고정 포인터를 사용하지만 해제 의미 체계는 사용할 수 없습니다. /EHa 사용 고려
블록 범위에 선언된 고정 포인터가 가리키는 관리되는 힙의 개체를 고정 해제하기 위해 컴파일러는 로컬 클래스의 소멸자 동작을 시뮬레이션합니다. 고정 포인터에 포인터를 무효화하는 소멸자가 있는 "척"합니다. 예외를 throw한 후 소멸자 호출을 사용하도록 설정하려면 /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 );
}