Sebagai jawaban atas keterlambatan Tim untuk berdiskusi (yang juga membahas salah satu komentar paling awal dari Lev).
Sebagai salah satu dari mereka yang berpendapat untuk keluar dari destruktor di statechart (argumen berdasarkan kasus penggunaan nyata, tentang interaksi dengan dunia nyata yaitu I / O) kembali ketika diajukan ke Boost, saya setuju ada masalah dalam menempatkan keluar logika dalam destruktor. David Abrahams secara mengejutkan membuat argumen persuasif tentang keselamatan pengecualian juga. Karena alasan itu, Statechart tidak mengharuskan Anda untuk menempatkan logika pada destruktor - tetapi memungkinkan Anda untuk - dengan saran yang biasa.
Logika yang seharusnya hanya dijalankan sebagai bagian dari transisi keluar dari keadaan (bukan penghancuran objek statechart secara keseluruhan) dapat (dan harus jika ada juga pembersihan sumber daya yang harus dilakukan) dipisahkan menjadi tindakan keluar () yang terpisah.
Untuk keadaan "tipis" tanpa keadaan aktif (sumber daya), cukup tindakan masuk / keluar untuk dilakukan, Anda dapat melakukan tindakan tersebut dalam ctor dan d'tor dan pastikan konstruktor dan destruktor tidak melempar. Tidak ada alasan bagi mereka untuk - tidak ada negara untuk melakukan RAII - tidak ada kejahatan dalam memiliki penanganan kesalahan di tempat-tempat ini menimbulkan peristiwa yang tepat. Anda mungkin masih perlu mempertimbangkan apakah Anda ingin tindakan keluar yang mengubah keadaan eksternal untuk berjalan pada kehancuran mesin negara ... dan menempatkannya dalam tindakan keluar jika Anda tidak ingin mereka terjadi dalam kasus ini ...
Statechart memodelkan aktivasi sebagai instantiasi objek, jadi jika konstruktor Anda memiliki pekerjaan / aktivasi / instantiasi nyata untuk dilakukan dan jika ia dapat gagal sehingga keadaan tidak dapat dimasukkan, Statechart mendukung itu dengan memberi Anda kemampuan untuk memetakan pengecualian terhadap suatu peristiwa. Ini ditangani dengan cara yang bekerja pada hierarki negara mencari keadaan luar yang menangani peristiwa pengecualian, analog dengan cara tumpukan akan membatalkan untuk model doa berdasarkan panggilan stack.
Ini semua didokumentasikan dengan baik - Saya sarankan Anda membaca dokumen dan mencobanya. Saya menyarankan Anda menggunakan destruktor untuk membersihkan "sumber daya perangkat lunak" dan keluar dari tindakan untuk melakukan "tindakan keluar dunia nyata".
Perlu dicatat bahwa propagasi pengecualian adalah sedikit masalah di semua lingkungan event driven, bukan hanya statechart. Cara terbaik untuk mempertimbangkan dan memasukkan kesalahan / kesalahan dalam desain statechart Anda dan jika dan hanya jika Anda tidak bisa menangani mereka dengan cara lain menggunakan pemetaan pengecualian. Setidaknya itu bekerja untuk saya - ymmmv ....