std ::функция копирования параметров?

Мой код:

#include <iostream>
#include <functional>
using namespace std;

struct A {
  A() = default;
  A(const A&) {
    cout << "copied A" << endl;
  }
};

void foo(A a) {}

int main(int argc, const char * argv[]) {
  std::function<void(A)> f = &foo;
  A a;
  f(a);
  return 0;
}

Я дважды вижу "скопировано A" на консоли. Почему объект копируется дважды, а не один раз? Как я могу предотвратить это должным образом?

9
задан lucas clemente 10 August 2012 в 04:32
поделиться