私のC++アプリケーション(Visual Studio 2010を使用)では、次のようにstd::functionを格納する必要があります。
class MyClass
{
public:
typedef std::function<int(int)> MyFunction;
MyClass (Myfunction &myFunction);
private:
MyFunction m_myFunction; // Should I use this one?
MyFunction &m_myFunction; // Or should I use this one?
};
ご覧のとおり、コンストラクターの参照として関数の引数を追加しました。
しかし、私のクラスに関数を格納するための最良の方法は何ですか?
- std :: functionは単なる関数ポインタであり、関数の「実行可能コード」はメモリに残ることが保証されているので、関数を参照として保存できますか?
- ラムダが渡されて呼び出し元が戻ってきた場合に備えて、コピーを作成する必要がありますか?
私の直感では、参照(const-referenceでも)を保存しても安全だと言っています。コンパイラがコンパイル時にラムダのコードを生成し、アプリケーションの実行中はこの実行可能コードを「仮想」メモリに保持することを期待しています。したがって、実行可能コードが「削除」されることはなく、その参照を安全に保存できます。しかし、これは本当に本当ですか?