I'm using the boost meta state machine and upon entry of this state, I create two threads, and stop these threads in the on_exit().

In on_entry(), I call the functors of each class and create threads and add those to a boost thread_group. What I need to do now is call the destructor of the objects on the threads ( of ClassA and ClassB) within on_exit(). I'm unclear as to how the destructors of the objects would/should be called when interrupting the threads. The destructors are currently not being called.


    struct MyEvent : public msm::front::state<>
    {  
        template <class Event, class FSM>
        void on_entry(Event const&, FSM&);
           
        template <class Event, class FSM>
        void on_exit(Event const&, FSM&);
          
        boost::thread_group threads;
    };

    template <class Event, class FSM>
    void psm_::MyEvent::on_entry(Event const& ev, FSM& sm)
    {
        auto bb = std::make_shared<bounded_buffer<MyData> >(100);

        ClassA<bounded_buffer<MyData> > c_a(bb);
        ClassB<bounded_buffer<MyData> > c_b(bb);

        threads.add_thread(new boost::thread(c_a));
        threads.add_thread(new boost::thread(c_b));
    }

    template <class Event, class FSM>
    void psm_::MyEvent::on_exit(Event const& ev, FSM& sm)
    {
        threads.interrupt_all();
        threads.join_all();
    }

    template <class Buffer>
    class ClassB
    {
        private:
            typedef typename Buffer::value_type value_type;

            shared_ptr<Buffer> m_container;

        public:
            ClassB(shared_ptr<Buffer> buffer) : m_container(buffer) { }
           ~ClassB() {  // ... }

        void operator()() {
                try {
                    // ... do stuff
                    boost::this_thread::interruption_point();
                }
                catch(const boost::thread_interrupted&) {
                    // ...
                }
            }
    }