0
我有以下两个函数,第一个崩溃但第二个运行正常。 我知道,对于第一个,run()返回时对象被销毁,但线程仍在执行它的work()函数,这可能会导致未定义的行为。在boost线程中调用一个类的成员函数
但为什么第二个工作?如果我们把这个对象包装在一个shared_ptr中,它会比那个线程活跃起来?
请赐教。谢谢。
void run() {
Object object();
boost::thread t(&Object::work, &object);
}
void run() {
std::shared_ptr<Object> object_(new Object());
boost::thread t(&Object::work, object);
}
其中是绑定表达式? t(&Object :: work,&object)隐式调用bind? – jiawen
@jiawen是的。对不起,这可能会更清晰。实际上,不需要使用'boost :: bind',但是'std :: thread'构造'std :: bind'是以相同的方式指定的。这也意味着如果你想绑定引用,你需要'boost :: ref(object)'(或'std :: ref(object)') – sehe