다음을 통해 공유


컴파일러 경고(수준 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 );
}