在我的 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 只是一个函数指针,并且函数的“可执行代码”保证保留在内存中吗?
- 如果传递了 lambda 并且调用者返回,我是否必须制作副本?
我的直觉说存储引用(甚至是常量引用)是安全的。我希望编译器在编译时为 lambda 生成代码,并在应用程序运行时将此可执行代码保存在“虚拟”内存中。因此可执行代码永远不会被“删除”,我可以安全地存储对它的引用。但这是真的吗?