이전에 보지 못했던 아주 이상한 행동을 발견했습니다. 복잡한 VS2005 C++ 프로젝트에서 일하고 있습니다.예외가 발생했을 때 소멸자가 실행되지 않음 (스택을 해제하지 않음)
class Tester
{
public:
Tester()
{
TRACE("Construct Tester");
}
~Tester()
{
TRACE("~Destruct Tester");
}
};
void Thrower()
{
Tester X;
throw std::exception("Booom");
}
Thrower()
을 호출하면 Trace output에서 무엇을 기대합니까? 테스터가 생성 된 후 스택이 풀렸을 때 파괴됩니까?
적어도 나는 그것을 기대하지만 테스터의 소멸자는 결코 호출되지 않는다!
불가능!!!?!?!
Visual Studio의 버그입니까?
많이 찾았지만 Stackoverflow조차 찾지 못했습니다. 답변을 찾았습니다.
저는 언어 변호사로부터 C++ 표준이 허용하는지 여부에 관해 의견을 듣고 싶습니다. 구현에 버그가 무엇인지 설명하고있는 것 같습니다. – WilliamKF
Visual Studio의 버그 인 경우 인터넷에 정보가 있어야합니다. 그러나 나는 아무것도 찾을 수 없었다. 하지만 어쩌면 당신이 옳을 수도 있습니다. – Elmue