在boost线程中调用一个class的成员函数

Call member function of a class in boost thread

我有以下两个功能,第一个崩溃但第二个运行正常。 我知道对于第一个,对象在 run() 返回时被销毁,但线程仍在执行其 work() 函数,这可能导致未定义的行为。

但为什么第二个有效?如果我们将对象包装在 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);
}

是的。绑定按值存储参数。

这意味着共享指针的副本一直存在,直到绑定表达式不复存在。这使对象保持不变。

有趣的注意事项:boost::bind 支持为成员函数的 this 参数绑定到 shared_ptr<T>std::bind 没有此功能(还没有?)