В моем приложении на С++ (с использованием 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 - это просто указатель на функцию, и "исполняемый код" функции гарантированно останется в памяти?
- Должен ли я сделать копию в случае передачи лямбда и возврата вызывающего?
Чувство кишки говорит, что безопасно хранить ссылку (даже константу-ссылку). Я ожидаю, что компилятор будет генерировать код для лямбда во время компиляции и сохранить этот исполняемый код в виртуальной памяти во время работы приложения. Поэтому исполняемый код никогда не "удаляется", и я могу безопасно хранить ссылку на него. Но действительно ли это так?