移至shared_ptr后如何调用std :: function

时间:2019-04-13 22:39:19

标签: c++ c++17 shared-ptr std-function

我对如何调用已移到shared_ptr中的std :: function感到困惑……

#include <iostream>
#include <functional>

using func_type = std::function<int()>;

int main(int, char*[])
{   
    func_type func = [] () { return 42; };
    std::cout << func() << "\n"; // -> 42
    auto sp_func = std::make_shared<func_type>(std::move(func));
    // how do we now call the function?
}

对于任何朝着正确方向的(智能)指针表示感谢。

1 个答案:

答案 0 :(得分:2)

好吧,您刚刚创建了一个指向您函数的(智能)指针。 访问对象所需要做的就是取消引用该指针,然后返回函数。

在这种情况下,您应该只使用(*sp_func)()

注释:

  1. 确保括号内,以便在尝试调用该函数之前取消引用指针;呼叫运算符的优先级比取消引用的优先级高。
  2. 您永远不应再依赖移动的对象。也就是说,在您的代码中,此举之后再也不要尝试直接调用func()。这是未定义的行为。您真的不知道移动的对象的状态。