Hi Guys,
 
Steven is correct. After adding the following copy contructor to group_helper class:
group_helper(const group_helper& gp) { std::cout << "group_helper::copy ctor called" << std::endl; }
 
The number of ctors matches that of the dtors. So the threaded code is correct thanks to boost::shared_ptr.
 
Cheers,
Robert 


 
On Sun, Aug 23, 2009 at 10:05 PM, Mathias Gaunard <mathias.gaunard@ens-lyon.org> wrote:
Boost lzw wrote:

class group_helper           {                           private:
   boost::shared_ptr<FileThread> m_object;   public:                          group_helper() : m_object(boost::shared_ptr<FileThread>(new FileThread))
            { std::cout << "group_helper::ctor called" << std::endl;}
   void operator()() { m_object->find(); m_object->print(); }
   ~group_helper() { std::cout << "group_helper::***dtor called" << std::endl; }
};

int main()
{
   group_helper gp;
   boost::thread_group threads;
       for (int i = 0; i < 1; ++i)
           threads.create_thread(gp);              threads.join_all();                  
   return 0;
}
===========
Output: 1 call to "group_helper::ctor called"
   6 calls to "group_helper::***dtor called"
===========
If the code is correct, does this mean that with thread_group we can no longer expect the # of ctors matches that of the dtors in threaded code?

It has nothing to do with threads, it's because you're not displaying calls to the copy constructor.


_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users