이것은 HANDLE의 올바른 사용법에 대한 매우 기본적인 질문입니다.핸들은 어떻게 적절하게 관리되고 있습니까?
typedef void* HANDLE;
HANDLE myHandle;
myHandle = SomeObject;
//...some elaborate code...//
첫 번째 질문 : myHandle 이제 스택 또는 힙에 위치해 있습니다 (이것은 특정 소스 파일이되지 않음) 다음 코드를 감안할 때? 핸들은 인덱스 일뿐 아니라 포인터가 될 수 있기 때문에 이에 대해서는 확실하지 않습니다.
지점에서 myHandle이 범위를 벗어났습니다 (적어도 그렇게 생각합니다). 그러나 클래스 멤버 인 경우에는 소유 객체가 삭제 될 때까지 계속 표시됩니다. 그래서 두 번째 질문 :이
myHandle = 0; // I do not need this handle anymore
내가 지금 메모리 관리와의 충돌로 실행됩니다, 또는 다른 제한 관리에 관한 할 수있는 좋은 방법이
내가 myHandle에 더 이상 액세스를 방지하려면입니다 암호? 다른 옵션이 핸들은 포인터에 더 이상 유사한 사용되어서는 안된다는이 명시 다음과 같다
mypointer = NULL;
편집 : 나는 분명히 C++에 포함되지 않은 첫 번째 장소에서 가비지 컬렉션에 대해 얘기했다. 이 부분은 managed extensions입니다. 이 치명적인 오류로 나를 도와 주셔서 감사합니다!
"포인터는 물론 색인"? "가비지 수집기에서 제거"? 여기에서 무슨 일이 일어나고 있는지 ... 처음부터 시작할 것입니다. 이 질문은별로 의미가 없습니다. –
우선 C++에서 가비지 컬렉터가 없으므로 C++ 메모리 관리에 대해 더 자세히 읽으시기 바랍니다. WinAPI 핸들을 참조하는 경우 핸들을 수행 한 후에 핸들에서 CloseHandle (핸들)을 호출해야합니다. 그러나 다시 C++ 메모리 관리를 연구해야합니다. 그렇지 않으면 더 심각한 문제가 발생할 것입니다. – Kourosh
* 대답 중 * none *이 RAII를 제안하는 이유는 무엇입니까? upvoting 가치가 대답을 줘! – jalf