如何在移动到shared_ptr后调用std :: function

问题描述 投票:1回答:1

我被困在如何调用已移入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?
}

我会感谢任何(智能)指针朝着正确的方向发展。

c++ c++17 shared-ptr std-function
1个回答
2
投票

好吧,你刚刚创建了一个指向你的功能的(智能)指针。要访问该对象,您需要做的就是取消引用该指针,然后重新获得您的功能。

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

笔记:

  1. 确保你括号,以便在尝试调用函数之前取消引用指针;调用运算符的优先级高于解除引用的优先级。
  2. 你永远不应该再依赖一个被移动的物体。也就是说,从来没有在你的代码中尝试在移动后直接调用func()。这是未定义的行为。您实际上并不知道移动对象的状态。
© www.soinside.com 2019 - 2024. All rights reserved.