переменной? Интересует самый красивый способ (т.к. про четыре некрасивых/неидеоматических я и так уже знаю).
Блок
Поместить её в отдельный скоуп) Так, например, часто для локгардов делают
Куча вложенных {} - не очень выразительно. Хотелось бы именно что-то вроде std::fstream::close, но на уровне самого языка.
Зачастую это сигнализирует о проблеме проектирования, если нужно много вложенных скоупов Зачастую они не нужны
Я в процессе рефакторинга кода с С. Есть активная работа с файло-подобными ресурсами и имеющийся линейный алгоритм с аналогами функций fopen/fwrite/fclose мне кажется достаточно выразительным, где надо как-то читать/обрабатывать из разных потоков данные. Для удобства и производительности не хочется держать открытыми неиспользуемые дескрипторы для нескольких файлов.
Вынести работу с файлом в отдельную функцию можно А так, если честно, я очень сомневаюсь, что открытые файловые дескрипторы уж настолько сильно на производительность влияют. Не миллионы же их там
Да, можно этот код отрефакторить сильнее (отдельные функции и range-based-for сейчас главное инструменты для этого), но я надеялся обойтись "малой кровью" для быстрого переписывания кода. И, на самом деле, файловые дескрипторы - просто пример какого-то ресурса для которого надо четко определять lifetime (и судя по Вашим словам - пример неудачный). Спасибо, я понял, что лучшего способа (вроде mem::drop из раста) нет. И, как я понимаю, сейчас нет пропозалов для подобных "любителей странного".
template <class T> void drop(T) {}; drop(std::move(value)); // value перейдёт в moved-from state
О, как. Спасибо, попробую. Впрочем, оно не очень быстро будет работать. Просто вызвать деструктор - было бы быстрее, как мне кажется.
Ещё альтернатива - положить в optional<T> и сбрасывать в нужный момент (и не использовать после этого)
Это просто вызов деструктора
move-ctor => dtor нового => dtor moved-out старого, разве нет?
Мув-конструктор - по-хорошему очень быстрая операция По крайней мере он по возможности таким должен быть
Если это функции без возможности заинлайнить (определение в другом TU и нет LTO), то так, да
Обсуждают сегодня