Re[33]: Они сделали дерьмо опять
От: lpd Черногория  
Дата: 22.05.20 07:21
Оценка:
Здравствуйте, chaotic-kotik, Вы писали:

CK>Здравствуйте, lpd, Вы писали:



CK>то что мы можем писать свой код в деструкторе, это тоже так совпало и хак чистой воды? если следовать твоей логике, то писать деинициализацию в деструкторе — хак чистой воды, поэтому класс MyFile должен иметь метод destroy, который нужно явно вызывать перед тем как объект будет удален, а в деструкторе ничего делать не надо, не так ли?


Деструктор напрямую связан с объектом по логике. А вот объекты-обертки для освобождения ресурсов или для освобождения памяти — это хак.

lpd>>Я это видел, вариант с прямой проверкой результата вызова оператора new или malloc() кашей не считаю. То, что запись auto x = std::make_unique<X>(); более короткая, не значит что она лучше.


CK>дело не в длине записи, вариант с new не возвращает nullptr, он бросает исключение, проверять его придется так:


Обрабатывать исключение от каждого new отдельно. Но вообще выброс исключения new при нехватке памяти вместо возврата ошибки — сама по себе не самая удобная схема, имхо, впрочем вроде как это поведение можно менять.

CK>free это code smell потому что если тебе нужен кусок памяти, то есть std::vector<char> например, если нужно создать объект, то зачем тебе кусок неинициализированной памяти и почему бы не воспользоваться new, если дошло до new, то возникает вопрос, зачем там голый указатель, а не unique_ptr.


unique_ptr<> освобождается неявно и записывается длинно, лично на мой вкус. Аргументы я свои изложил, тут не вижу смысла дальше спорить.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.