Оптимальный вариант локальной именованной константы
Есть потенциально тяжелый (например, с необходимость динамического выделения памяти) локальный неизменяемый объект класса BigObject
. Этот объект используется по месту, например:
void f() {
g(BigObject{42});
}
Хочется этот BigObject{42}
поименовать для улучшения самодокументируемости кода, например:
void f() {
// static
// const
// constexpr
auto thing = BigObject{42};
g(thing);
}
Можно ли предусмотреть вариант, подходящий в общем, или это всегда deal в зависимости от конечного использования?
Например, при однократном вызове f
скорее всего достаточно иметь просто локальную константу, уничтожаемую при выходе из функции. Если вызовов много, то допустим static
, чтобы не создавать объект N раз, но тогда он будет существовать до момента выгрузки кода, т.е. будет занимать память, когда уже перестал быть нужен.
Наверное, всё это ещё будет так или иначе обработано оптимизатором и реальный (низкоуровневый) код может быть совсем другим.
Тем не менее, какой вариант вам кажется предпочтительным и почему, какие плюсы и минусы вы видите для разных подходов, которые я не отразил в этом сообщении?