이 질문이 중복되는 경우 사과드립니다. 잠시 동안 수색했으나 내 Google-fu가 스너프가 아닐 가능성이 있습니다.C++에서 예외가 throw 된 후 메모리를 어떻게 해제해야합니까?
C 라이브러리를 호출하는 C++ 프로그램을 수정 중입니다. C 라이브러리는 (malloc()
을 사용하여) 메모리를 할당하고 C++ 프로그램은이를 사용하고 해제합니다. catch는 C++ 프로그램이 실행 중간에 예외를 throw하여 할당 된 메모리가 절대로 해제되지 않도록합니다.
/* old_library.c */
char *allocate_lots() {
char *mem = (char *)malloc(1024);
return mem;
}
/* my_prog.cpp */
void my_class::my_func() {
char *mem = allocate_lots();
bool problem = use(mem);
if (problem)
throw my_exception("Oh noes! This will be caught higher up");
free(mem); // Never gets called if problem is true
}
내 질문은 다음과 같습니다 :이 다루는 마땅 방법 (오히려 인위적인) 예를 들어
? 내 첫 번째 아이디어는 시도/catch 블록에서 모든 것을 래핑하는 것이 었습니다. catch를 그냥 확인하고 메모리를 비우고 예외를 다시 던지기 만했습니다.하지만 이것은 나에게 무섭고 어설픈 것처럼 보입니다. 실제로는 예외를 잡으려고합니다. 그것을 할 수있는 더 좋은 방법이 있습니까?
편집 : std :: unique_ptr가 도입되기 전에 2007 년에 g ++ 4.2.2를 사용했음을 언급 했어야합니다. 기업의 관성에 맞추어 말하십시오.
왜 예외를 throw하기 전에 메모리를 비울 수 없습니까? –
RAII를 사용하여 문제를 해결했습니다. – Borgleader