当异步调用函数对象时,将std::shared_ptr
传递给std::bind
是否安全?
即。大致如下安全:
// Copy do not reference shared_ptr
void someFunc(std::shared_ptr<Something> arg1,...other args...);
std::shared_ptr<Something> data; // This may go out of scope before the functor below is called
auto myFuture = QtConcurrent::run(std::bind(&someFunc,data,...other args...)); // In this case using QT but could be anything else
我认为std::bind
通过引用获取其参数,上述内容不安全但想确认。
为了记录我正在使用两个编译器:
答案 0 :(得分:4)
std::bind
返回的函数对象存储绑定参数的副本,因此就data
的生命周期而言,您的代码是安全的。