есть ли способ сделать такое для конструктора копирования или присваивания?
Есть класс, который хранит что-то в динамической памяти.
При его копировании при создании нового экземпляра я тоже память выделяю. Но может получится, что памяти не хватит. Только вот new() может вернуть nullptr, а some_t& operator=(some_t& other); не может.
Что тут можно сделать? Использовать подход null-object?
Идея с null-object не очень. Нужно более кардинально смореть на проблему - может ли процесс продолжать функционировать, когда закончилась память.
Да, либо удалить оператор копирования, и добавить метод .clone(), который возвращает тип сумму bad_allocation | object. Либо после копирования дергать какой-нибудь is_valid, но однажды забыть его и F.
Хороший вариант, куда лучше чем null-object.
Мне пока он больше всего нравится, как в расте обработка ошибок, да. Чтоб и объект и ошибка была одной связанной структурой, тогда сложнее нечаянно забыть обработать ошибки.
вроде на этот подход хорошо ложится c++ structured binding
Обсуждают сегодня