토론에 대한 Tim의 늦은 입장에 대한 답변으로 (Lev의 초기 의견 중 하나도 언급).
부스트에 제출되었을 때 상태 차트 (실제 사용 사례를 기반으로 한 인수, 실제 세계와의 상호 작용에 대한 인수)에 대한 인수와의 분리를 주장한 사람들 중 하나로서 Boost에 제출했을 때 나가는 데 문제가있을 수 있음에 동의합니다 소멸자의 논리. 데이비드 아브라함은 당연히 예외 안전에 관한 설득력있는 주장을했습니다. 이러한 이유로 Statechart는 소멸자에 논리를 넣을 것을 요구하지는 않지만 일반적인 조언으로 할 수 있습니다.
상태에서 전이의 일부로 만 실행되는 논리 (상태 차트 개체 전체를 파괴하지 않음)는 별도의 exit () 작업으로 분리 될 수 있습니다 (자원 정리가 필요한 경우).
활성 상태 (자원)가없는 "얇은"상태의 경우 수행 할 시작 / 종료 조치 만 ctor 및 d' tor에서 해당 조치를 수행하고 생성자와 소멸자가 던지지 않도록 할 수 있습니다. RAII를 수행 할 상태가없는 이유는 없습니다. 이러한 장소에서 오류 처리를 수행하여 적절한 이벤트를 발생시키는 데 악은 없습니다. 상태 머신 파괴시 외부 상태를 변경하는 종료 조치를 원하는지 여부를 고려해야 하고이 경우에 발생하지 않으려면 종료 조치를 취해야합니다 ...
상태 차트는 활성화를 객체의 인스턴스화로 활성화하므로 생성자가 수행 할 실제 작업 / 활성화 / 인스턴스화가 있고 실패 할 수있는 경우 상태를 입력 할 수없는 경우 상태 차트는 예외를 행사. 이것은 스택이 호출 스택 기반 호출 모델에 대해 풀린 방식과 유사하게 예외 이벤트를 처리하는 외부 상태를 찾는 상태 계층 구조를 작동시키는 방식으로 처리됩니다.
이것은 모두 잘 문서화되어 있습니다. 문서를 읽고 사용해보십시오. 소멸자를 사용하여 "소프트웨어 리소스"를 정리하고 작업을 종료하여 "실제 종료 작업"을 수행하는 것이 좋습니다.
예외 전파는 상태 차트뿐만 아니라 모든 이벤트 중심 환경에서 약간의 문제입니다. 상태 차트 디자인에 오류 / 오류를 추론하고 포함시키는 것이 가장 좋으며 예외 매핑에 대한 다른 방법으로 오류를 처리 할 수없는 경우에만 가능합니다. 적어도 그것은 저에게 효과적입니다-ymmmv ....