在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
没有此功能(还没有?)
我有以下两个功能,第一个崩溃但第二个运行正常。 我知道对于第一个,对象在 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
没有此功能(还没有?)