std::function をコールバック ハンドラとして使用しようとしています。
このような、
void some_job( int arg1, std::function<void(int)> & callback )
{
callback( process(arg1) );
}
この例では、参照渡しを使用しました。
しかし問題は、関数がプログラムの非同期コンテキストで実行されるため、std::function
オブジェクトがまだ存在することを保証できないことです。callback
そのため、関数オブジェクトのライフサイクルを管理する必要があり、そのために 2 つの方法を考えました。
値渡し(コピー)の使用
使用して
std::shared_ptr
私のシステムでは のサイズがstd::function
24 バイトに固定されており、std::shared_ptr
8 であることを知っています。
ただし、コピーするstd::shared_ptr
と、参照カウンターを管理する追加のオーバーヘッドが発生します。(さらに、 の shared_ptr オブジェクトを作成するスマートできちんとした方法が見つかりませんstd::function
。)
どちらの方法でパフォーマンスが向上しますか?