我有以下两个功能,第一个崩溃但第二个运行正常。 我理解,对于第一个,当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);
}
答案 0 :(得分:1)
是。按值绑定存储参数。
这意味着共享指针的副本一直存在,直到绑定表达式不存在为止。这使对象保持不变。
有趣的说明:boost::bind
支持绑定到shared_ptr<T>
成员函数的this
参数。 std::bind
没有此功能(但是?)