C++线程中,C++对象作为参数时,可能会出现对象析构
解决办法,用std::ref,boost::ref,或者使用指针。
现象如下:
class testA
{
public:
testA() :a(100) {
qDebug() << "testA()!";
}
~testA() { std::cout << "--- ~~~testA()--析构--!\n"; }
testA(const testA& t) :a(t.a)
{
std::cout << "--- testA()--copy--!\n";
}
void print() { std::cout << "print()!\n"; }
private:
int a;
};
void threadTest(testA& t)
{
t.print();
}
void threadTest2(testA* t)
{
t->print();
}
int main(int argc, char* argv[])
{
testA ttt;
std::cout << "t1...\n";
std::thread t1(threadTest, ttt);
t1.join();
std::cout << "t2...\n";
boost::thread t2 = boost::thread(threadTest, ttt);
t2.join();
std::cout << "t3...\n";
boost::thread t3 = boost::thread(threadTest2, &ttt);
t3.join();
std::cout << "t4...\n";
boost::thread t4 = boost::thread(threadTest, boost::ref(ttt));
t4.join();
}
结果:
std::thread与boost::thread不太一样