我正在尝试使用 std::function 作为回调处理程序。
像这样,
void some_job( int arg1, std::function<void(int)> & callback )
{
callback( process(arg1) );
}
在这个例子中,我使用了传递引用。
但问题是,我不能保证该std::function
对象callback
仍然存在,因为该函数在我的程序的异步上下文中执行。
所以我必须管理函数对象的生命周期,我想了两种方法。
使用传值(复制)
使用
std::shared_ptr
我知道std::function
我的系统中的大小固定为 24 字节,std::shared_ptr
为 8。
但是复制std::shared_ptr
会导致管理它的引用计数器的额外开销。(此外,我找不到任何巧妙而巧妙的方法来制作 shared_ptr 的对象std::function
。)
哪种方式在性能上会更好?