다음을 통해 공유


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