외부 타사 C 라이브러리를 사용하는 C++ 라이브러리를 작성하고 있습니다. 따라서 제 도서관은 제 3 자 도서관의 기능을 호출 할 것이고 제 3 자 도서관은 제 도서관의 다른 부분을 다시 호출 할 것입니다.외부 링크 된 C 라이브러리의 예외 전파
이 경우 어떤 예외가 발생하는지 궁금합니다. MyLib :: foo()가 결국 MyLib :: bar()를 호출하는 외부 C 라이브러리 함수를 호출하고 막대가 예외를 throw합니다. 어떻게됩니까? 예외가 foo()의 핸들러에 올바르게 전달 될까요?
감사합니다.
이것은 내 대답보다 낫습니다. 제 3 자 라이브러리가 C++가 아닌 C 인 것을 보지 못했습니다. 질문자가 여러 번 언급하더라도. 잠깐. –
정답입니다. 일부 구현 (GNU)이 예외를 C 코드에서 전파 할 수 있도록 시도하기는하지만이 방법을 사용하는 것은 매우 바람직하지 않습니다. 이식성이 떨어질뿐만 아니라 그 사이의 C 코드가 일관성없는 상태가 아니거나 아직 외부에서 기록되지 않았거나 해제 된 메모리 할당을 보유하지 않을 것이라고 가정 할 이유가 없습니다. 기껏해야 당신은 메모리 누출과 최악의 경우 무작위 충돌을 요구하고 있습니다. 문제를 해결하는 방법에 대한 sbi의 제안이 마음에 들지만 모듈 경계에서 예외를 던지지 않는 것이 좋습니다. –
@ 토미 : 나는 왜 C 라이브러리를 통해 전파되는 예외가 당신의 대답에 대한 코멘트로 좋지 않은지에 대한 오랜 설명을 썼다. 당신이 코멘트를 저 지르길 원했을 때 이미 그것을 삭제했다면 심술이났다. 당신의 좋은 코멘트에 감사드립니다. ':)' – sbi