在我的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 并调用者返回,是否必须进行复制?
我的直觉告诉我可以安全地存储引用(甚至是 const 引用)。我希望编译器在编译时生成 lambda 的代码,并在应用程序运行时将此可执行代码保存在“虚拟”内存中。因此,可执行代码永远不会被“删除”,我可以安全地将其引用存储起来。但这是真的吗?
std::function
的引用,而被引用的那个std::function
超出了其作用域,那么它所包含的内容并不重要,你就会遇到问题。请注意,需要保持原意并简化表述,不得添加解释。 - Xeostd::reference_wrapper
传递了一个functor的std::function
,而所引用的functor的生命周期已经结束,和/或(B)对std::function
的引用的参考方的生命周期已经结束,那么将会出现可怕的情况。 - underscore_d