Следует ли мне копировать std :: function или всегда могу ссылаться на нее?

В моем приложении 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 - это просто указатель на функцию и «исполняемый код» функция гарантированно останется в памяти?
  • Должен ли я делать копию, если передается лямбда и вызывающий возвращается?

Мое чутье подсказывает, что хранить ссылку (даже константную) безопасно. .Я ожидаю, что компилятор сгенерирует код для лямбда во время компиляции и сохранит этот исполняемый код в «виртуальной» памяти во время работы приложения. Поэтому исполняемый код никогда не «удаляется», и я могу безопасно сохранить ссылку на него. Но так ли это на самом деле?

59
задан Patrick 3 January 2012 в 11:10
поделиться