在boost线程中调用类的成员函数

时间:2015-01-06 23:25:17

标签: multithreading boost shared-ptr

我有以下两个功能,第一个崩溃但第二个运行正常。 我理解,对于第一个,当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);
}

1 个答案:

答案 0 :(得分:1)

是。按值绑定存储参数。

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

有趣的说明:boost::bind支持绑定到shared_ptr<T>成员函数的this参数。 std::bind没有此功能(但是?)