【发布时间】:2013-02-05 04:04:06
【问题描述】:
我正在尝试使用 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 会导致管理其引用计数器的额外开销。
(此外,我找不到任何巧妙而简洁的方法来制作 std::function 的 shared_ptr 对象。)
哪种方式性能更好?
【问题讨论】:
-
按值复制即可。
-
"哪种方式的性能更好?"在真实的运行场景中对其进行测量。但我会按价值传递,只有在证明是一个问题时才考虑它。
-
托尼的回答几乎肯定是正确的。共享指针引用计数对于这个来说太重了。在您分析并证明性能问题之前,您最好复制而不担心它。
标签: c++ shared-ptr pass-by-value std-function