ссылки на объект по значению в лямбде объект всё равно копировался?
Вот такой код
#include <iostream>
using std::cout;
using std::endl;
class Class {
public:
Class() { cout << "Create" << endl; }
Class(const Class &) { cout << "Copy-construct" << endl; }
Class(Class &&) { cout << "Move-construct" << endl; }
Class &operator=(const Class &) { cout << "Copy-assign" << endl; return *this; }
Class &operator=(Class &&) { cout << "Move-assign" << endl; return *this; }
~Class() { cout << "Destroy" << endl; }
void use() const { cout << "Use" << endl; }
};
Class cls;
auto getLambda() {
const Class &clsRef = cls;
return [=]() {
clsRef.use();
};
}
int main() {
auto l = getLambda();
auto l2 = l;
l();
l2();
return 0;
}
Выведет
Create
Copy-construct
Copy-construct
Use
Use
Destroy
Destroy
Destroy
Как-то не очень приятно.
Когда скидываешь код в тг, ставь перед кодом и после опострофы, чтобы нормально скинуть
Ссылки не имеют значения: их нельзя копировать и менять, у них нельзя взять адрес, на них нельзя создать другие ссылки, нельзя создать массив из ссылок
Незначительное уточнение. Копировать ссылки вроде можно - компилятор даже готов сгенерировать дефолтный конструтор копирования для класса содержащего ссылки.
Давно уже можно через меню адекватно форматировать
Обсуждают сегодня