私のコード:
#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」が 2 回表示されます。オブジェクトが 1 回ではなく 2 回コピーされるのはなぜですか? どうすればこれを適切に防ぐことができますか?