Thank you for the reply.

This is just a testing program for this question. What you said is that even the destructor is called for ClassA, and TestClass is out off scope in main function, the memory for ClassA may still be around and valid on the main thread's stack. I think I have to agree with you that this is depended on the compiler. According to C++ standard, "the object no longer exists" once a destructor is invoked for an object. It depends on how do we understand this "no longer exists".

From the C++ standard : (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2723.pdf)
Once a destructor is invoked for an object, the object no longer exists; the behavior is undefined if the destructor is invoked for an object whose lifetime has ended.

On Fri, Sep 12, 2008 at 5:36 PM, Steven Watanabe <watanabesj@gmail.com> wrote:
AMDG


PingShan Li wrote:
Here is my test program using boost::thread. I would expect this program to
crash inside FunctionA because m_ClassA is no longer available.

Can anybody help me to understand why it does not crash? thank you.
 

Incorrect programs are not guaranteed to crash.
The memory for m_ClassA is on the main thread's
stack and is almost certain to still be valid (at the
machine level) when FunctionA is called.  In fact,
depending on your compiler it may not have been
overwritten at all.

In Christ,
Steven Watanabe

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