Должны ли таблицы поиска быть статическими - PullRequest
1 голос
/ 18 марта 2009

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

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

Спасибо.

Ответы [ 5 ]

3 голосов
/ 18 марта 2009

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

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

2 голосов
/ 18 марта 2009

Это могут быть переменные класса, т. Е. Статические на уровне класса. Таким образом, они доступны для подклассов, если таковые имеются, и, возможно, немного более заметны, чем если бы они были «скрыты» как статические локальные переменные в отдельных методах.

1 голос
/ 18 марта 2009

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

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

0 голосов
/ 18 марта 2009

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

0 голосов
/ 18 марта 2009

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

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

...