В моем приложении 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?
};
Как видите, я добавил аргумент функции в качестве ссылки в конструктор.
Но как лучше всего сохранить функцию в моем классе?
Мое чутье подсказывает, что хранить ссылку (даже константную) безопасно. .Я ожидаю, что компилятор сгенерирует код для лямбда во время компиляции и сохранит этот исполняемый код в «виртуальной» памяти во время работы приложения. Поэтому исполняемый код никогда не «удаляется», и я могу безопасно сохранить ссылку на него. Но так ли это на самом деле?