std::thread and class constructor and destructor

Posted by toeplitz on Stack Overflow See other posts from Stack Overflow or by toeplitz
Published on 2012-10-19T22:57:13Z Indexed on 2012/10/19 23:00 UTC
Read the original article Hit count: 146

Filed under:
|
|

When testing threads in C++11 I have created the following example:

#include <iostream>
#include <thread>

class Foo {
public:
    Foo(void) {
        std::cout << "Constructor called: " << this << std::endl;
    }
    ~Foo(void) {
        std::cout << "Destructor called: " << this << std::endl;
    }
    void operator()() const {
        std::cout << "Operatior called: " << this << std::endl;
    }
};

void test_normal(void) {
    std::cout << "====> Standard example:" << std::endl;
    Foo f;
}

void test_thread(void) {
    std::cout << "====> Thread example:" << std::endl;
    Foo f;
    std::thread t(f);
    t.detach();
}


int main(int argc, char **argv) 
{
    test_normal();
    test_thread();

    for(;;);
}

Which prints the following:

enter image description here

Why is the destructor called 6 times for the thread? And why does the thread report different memory locations?

© Stack Overflow or respective owner

Related posts about c++

Related posts about multithreading