У отложенной инициализации появился конструктор с вычислением значения

11.08.2026

У обоих видов отложенной инициализации появился конструктор, который сразу вызывает замыкание для создания значения. Раньше замыкание можно было передать только отдельно, вызвав конструктор без значения.

Два вида отложенной инициализации

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

Чем неудобно было

Вызвать замыкание при создании можно было и раньше — отдельной командой. Но такая команда требует изменяемого доступа к переменной, которая объявлена как неизменяемая. То есть написание кода требовало либо объявлять переменную изменяемой без необходимости, либо оборачивать её во что-то ещё.

Новый конструктор снимает это: значение вычисляется в момент создания, а переменная остаётся неизменяемой.

Практическая польза

В коде с потоками это убирает необходимость в изменяемости вообще — переменная с отложенной инициализацией может быть передана по ссылке в несколько потоков сразу.

Оригинал

implement <OnceCell,OnceLock>::new_init

Упоминаний: 1 · Просмотров: 2