std :: bind参数复制行为

时间:2016-04-04 06:15:01

标签: c++ c++11 stdbind

当异步调用函数对象时,将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通过引用获取其参数,上述内容不安全但想确认。

为了记录我正在使用两个编译器:

  1. clang 7(OS X)
  2. VC ++ 12.0(I.E. Visual Studio 2013)

1 个答案:

答案 0 :(得分:4)

std::bind返回的函数对象存储绑定参数的副本,因此就data的生命周期而言,您的代码是安全的。