首页 > 解决方案 > 移动到 shared_ptr 后如何调用 std::function

问题描述

我被困在如何调用已移动到 shared_ptr 中的 std::function ...</p>

#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?
}

对于正确方向的任何(智能)指针,我将不胜感激。

标签: c++c++17shared-ptrstd-function

解决方案


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

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

笔记:

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

推荐阅读