gpt4 book ai didi

c++ - std::function 用于方法参数、拷贝或 shared_ptr?

转载 作者:搜寻专家 更新时间:2023-10-31 01:50:31 24 4
gpt4 key购买 nike

我正在尝试使用 std::function 作为回调处理程序。

像这样,

void some_job( int arg1, std::function<void(int)> & callback )
{
callback( process(arg1) );
}

在这个例子中我使用了引用传递。

但问题是,我不能保证 std::function 对象 callback 仍然存在,因为该函数在我的程序中是在异步上下文中执行的。

所以我必须管理函数对象的生命周期,我想了两种方法。

  1. 使用按值传递(复制)

  2. 使用 std::shared_ptr

我知道 std::function 的大小在我的系统中固定为 24 字节,而 std::shared_ptr 是 8。

但是复制 std::shared_ptr 会导致管理它的引用计数器的额外开销。(此外,我找不到任何聪明而简洁的方法来制作 std::function 的 shared_ptr 对象。)

哪种方式性能更好?

最佳答案

如果您在时间紧迫的程序中担心复制 24 字节或 8 字节更快 + 共享开销,您将不得不同时实现并使用探查器找出在您的特定情况下哪个更好。在这种情况下,您还应该考虑一种完全不同的方法,该方法将绕过可能隐藏在 std::function::operator() 中的虚拟调用。

否则,我只是按值获取参数,让优化器完成它的工作。

关于c++ - std::function 用于方法参数、拷贝或 shared_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14975027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com