사람들이 C++ 예외가 더 좋은 이유에 대해 머리를 터는 것처럼 보이지 않습니다. 예를 들어, 응용 프로그램에서 사용할 공유 객체에서 함수 객체를로드하는 응용 프로그램이 있습니다. 계속되는 내용은 다음과 같습니다.내 오류 처리 방법을 변경하는 방법
bool LoadFunctions()
{
//Get Function factory.
FunctionFactory& oFactory = GetFunctionFactory();
//Create functions from the factory and use.
}
FunctionFactory& GetFunctionFactory()
{
//Get shared object handle.
void* pHandle = dlopen("someso.so");
//Get function ptr for Factory getter.
typedef FunctionFactory* (*tpfFacGet)();
tpfFacGet pF = static_cast<tpfFacGet>(dlsym(pHandle, "GetFactory"));
//Call function and return object.
return *((*pF)());
}
이제는 많은 물건이 잘못 될 수 있습니다. 내가 항상 그렇게했던 것처럼 참조 대신 포인터를 반환 할 것이고, 그들이 NULL
인지 확인하고 오류 메시지를 출력하고 그렇지 않은 경우 나옵니다. 이렇게하면 일이 잘못되어 어디에서 복구 할 수 있는지 알 수 있습니다 (즉, 팩토리를로드하고 하나의 함수 만로드하면 실패 할 수 있습니다). 필자가 이해할 수없는 것은 이러한 시나리오에서 예외를 사용하는 방법과 오류 메시지를 인쇄하고 qutting하는 대신 프로그램을 복구하는 방법입니다. 누군가가 C++ 방식으로이 작업을 수행하는 방법을 말해 줄 수 있습니까?
"// 예외 메시지를 정상적으로 종료하십시오."- 이것은 내가 이해하지 못하는 것입니다. 그만두고 싶지 않으면? 그럼 내가 뭘해야하지? – nakiya
종료하지 않으려면 catch 블록에 대신 수행 할 작업을 작성하십시오. – Simone
쉽습니다. GetFunctionFactory 함수는 항상 일관된 결과를 반환하므로 매번 사용하지 않을 때마다 검사 할 필요가 없습니다. – daramarak