Why this strange output?
Why so many d'tor calls?
The code:
----------------------------------------------------------
#include <cstdio>
#include <boost/thread/thread.hpp>
class A
{
boost::thread *thread;
public:
A() : thread(0) {
printf("ctor\n");
}
~A() {
printf("dtor enter\n");
join();
//delete thread;
printf("dtor leave\n");
}
void createThread() {
printf("create enter\n");
thread = new boost::thread(*this);
printf("create leave\n");
}
void operator()() {
printf("start thread: %d\n", thread);
delete thread; thread = 0;
printf("leave thread\n");
}
void join() { if (thread) thread->join(); }
};
int main() {
A a;
a.createThread();
a.join();
return 0;
}
----------------------------------------------------------
The output:
----------------------------------------------------------
ctor
create enter
dtor enter
dtor leave
dtor enter
dtor leave
dtor enter
dtor leave
dtor enter
dtor leave
dtor enter
dtor leave
dtor enter
dtor leave
dtor enter
dtor leave
start thread: 0
dtor enter
dtor leave
leave thread
dtor enter
dtor leave
create leave
dtor enter
dtor leave
dtor enter
dtor leave
----------------------------------------------------------
Totally mess!