
Andreas Huber wrote:
F2. The UML standard defines that all currently active states are left when a state machine is terminated. I do not quote the text here as in the UML standard this is not a single definition but consists of what a final state is (2.12.2.5) and how states are exited when a transition is made (2.12.4.6). What is called "terminating the state machine" in this post (and in the boost::fsm documentation) is called "making a transition to the final state" in UML.
[and snip]
A1. When a state machine object is destructed, the modeled state machine must also be terminated (i.e. the destructor of the state machine unconditionally terminates the state machine before returning to the client). Actually, the UML standard in one place (2.12.4.4) hints in this direction but it is far from clear whether this assumption is covered by the UML standard (and could thus be put in the hard facts section).
F2 defines termination as "making a transition to the final state". It's far from clear that destroying a state machine should make a transition to the final state. Specifically, if the machine is in a state which has no transition to the final state, what does it mean to terminate the machine? If the machine is in such a state when it is destroyed, does it make sense to pretend it can transition to the final state when no such transition exists? I would think that when a state machine object is destroyed, no actions (exit or otherwise) should be executed; rather, it should just tear down the state machine and release its resources (state objects, transitions, whatever). What am I missing? Bob