Пример
struct MyObject {
MyObject(int value):value(value) { }
MyObject(MyObject const&o):value(o.value) { }
int value;
};
Предположим, что конструктор копирования делает что-то в дополнение к полезности. Тогда
std::function<void()> f() {
MyObject o;
std::vector<int> v;
return [=]() { /* use v and o */ &o; &v; }
}
v
и o
сначала копируются в исходный лямбда-объект, что отлично. Но затем они снова копируются каждый раз, когда объект лямбда должен быть перемещен. Хотя v
можно перемещать, но это не так. Это потому, что лямбда не имеет неявного конструктора перемещения, потому что o
не имеет конструктора перемещения или тривиального конструктора копии.
Может кто-нибудь объяснить объяснение этого?