Код: Выделить всё
class HeavyObject {
int x;
public:
HeavyObject(int x) : x(x) {}
HeavyObject &operator=(const HeavyObject &) = delete;
HeavyObject &operator=(HeavyObject &&) = delete;
};
using HeavyObjectGenerator = std::function;
class HeavyObjectManager {
HeavyObjectGenerator heavyObjectGenerator;
HeavyObject heavyObject{0};
public:
void updateHeavyObject(int x) {
heavyObject = heavyObjectGenerator(x);
}
HeavyObjectManager(HeavyObjectGenerator gen) : heavyObjectGenerator(gen) {}
};
Это имеет смысл, потому что std::function не знает, мэйби Я попытаюсь вернуть ссылку в HeavyObjectGenerator, и для этого потребуется конструктор копирования.
Но на практике я хочу, чтобы HeavyObjectGenerator просто создавал HeavyObject внутри его и немедленно вернуть, для чего не потребуется ни оператор копирования, ни оператор перемещения.
Каковы мои альтернативы для реализации того, что я хочу?
Подробнее здесь: https://stackoverflow.com/questions/784 ... y-operator
Мобильная версия