Должны ли таблицы поиска быть статическими

StackOverflow https://stackoverflow.com/questions/657920

  •  19-08-2019
  •  | 
  •  

Вопрос

У меня есть класс Message, который анализирует текстовые сообщения с помощью таблиц подстановки.Я получаю много сообщений и создаю и уничтожаю множество объектов, поэтому я подумал, что объявляю эти таблицы поиска статическими членами, чтобы предотвратить повторную инициализацию одних и тех же таблиц с одними и теми же значениями.

Это правильный подход или есть более подходящий способ C ++?

Спасибо.

Это было полезно?

Решение

Это звучит как правильный способ сделать это, хотя я бы ожидал, что компилятор оптимизирует это.Проводили ли вы сравнительный анализ своего приложения и ускоряет ли это объявление таблиц как статических?

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

Другие советы

Если ваши классы сообщений совместно используют информацию о поиске, возможно, стоит абстрагировать ваши статические запросы в собственный класс, чтобы они действительно инициализировались только один раз.

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

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

Да, все в порядке.Иногда это хорошее решение:функция статическая, которая будет создана только один раз.Также вы могли бы использовать одноэлементный объект, но он имеет более широкий доступ.

Будьте осторожны, если у вас многопоточное приложение и если ваши таблицы поиска содержат указатель на другие данные, которые могут быть уничтожены раньше, чем эта таблица.

Использование одноэлементного шаблона также будет работать для этого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top