170 похожих чатов

Привет всем. Как можно явно ограничить lifetime для auto storage

переменной? Интересует самый красивый способ (т.к. про четыре некрасивых/неидеоматических я и так уже знаю).

14 ответов

26 просмотров

Блок

Поместить её в отдельный скоуп) Так, например, часто для локгардов делают

LaG1924- Автор вопроса
Georgy Firsov
Поместить её в отдельный скоуп) Так, например, час...

Куча вложенных {} - не очень выразительно. Хотелось бы именно что-то вроде std::fstream::close, но на уровне самого языка.

LaG1924
Куча вложенных {} - не очень выразительно. Хотелос...

Зачастую это сигнализирует о проблеме проектирования, если нужно много вложенных скоупов Зачастую они не нужны

LaG1924- Автор вопроса
Georgy Firsov
Зачастую это сигнализирует о проблеме проектирован...

Я в процессе рефакторинга кода с С. Есть активная работа с файло-подобными ресурсами и имеющийся линейный алгоритм с аналогами функций fopen/fwrite/fclose мне кажется достаточно выразительным, где надо как-то читать/обрабатывать из разных потоков данные. Для удобства и производительности не хочется держать открытыми неиспользуемые дескрипторы для нескольких файлов.

LaG1924
Я в процессе рефакторинга кода с С. Есть активная ...

Вынести работу с файлом в отдельную функцию можно А так, если честно, я очень сомневаюсь, что открытые файловые дескрипторы уж настолько сильно на производительность влияют. Не миллионы же их там

LaG1924- Автор вопроса
Georgy Firsov
Вынести работу с файлом в отдельную функцию можно ...

Да, можно этот код отрефакторить сильнее (отдельные функции и range-based-for сейчас главное инструменты для этого), но я надеялся обойтись "малой кровью" для быстрого переписывания кода. И, на самом деле, файловые дескрипторы - просто пример какого-то ресурса для которого надо четко определять lifetime (и судя по Вашим словам - пример неудачный). Спасибо, я понял, что лучшего способа (вроде mem::drop из раста) нет. И, как я понимаю, сейчас нет пропозалов для подобных "любителей странного".

LaG1924
Да, можно этот код отрефакторить сильнее (отдельны...

template <class T> void drop(T) {}; drop(std::move(value)); // value перейдёт в moved-from state

LaG1924- Автор вопроса
Alexander Karaev
template <class T> void drop(T) {}; drop(std::mov...

О, как. Спасибо, попробую. Впрочем, оно не очень быстро будет работать. Просто вызвать деструктор - было бы быстрее, как мне кажется.

LaG1924
О, как. Спасибо, попробую. Впрочем, оно не очень б...

Ещё альтернатива - положить в optional<T> и сбрасывать в нужный момент (и не использовать после этого)

LaG1924- Автор вопроса
Sergey Skvortsov
Это просто вызов деструктора

move-ctor => dtor нового => dtor moved-out старого, разве нет?

LaG1924
move-ctor => dtor нового => dtor moved-out старого...

Мув-конструктор - по-хорошему очень быстрая операция По крайней мере он по возможности таким должен быть

LaG1924
move-ctor => dtor нового => dtor moved-out старого...

Если это функции без возможности заинлайнить (определение в другом TU и нет LTO), то так, да

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта