|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.03.2009, 18:15 | #1 |
Пользователь
Регистрация: 18.03.2009
Сообщений: 89
|
Статические обекты в .h файле
Мне в одной программе нужно было иметь что-то типа уникальных глобальных переменных-объектов классов, доступных из разных мест. В итоге я в описаниях классов, в h-файлах, добавил статические функции, возвращающие ссылки на статические объекты классов. Примерно как показано ниже:
class CClass { static CClass& GetStaticClass() { static CClass c; return c; } }; И все у меня прекрасно работало. Потом данную технологию увидел другой человек и сказал, что так делать нельзя. Типа если в заголовочном файле подобным образом объявлять переменные, то они могут насоздаваться в количестве нескольких штук, из-за того, что этот заголовочный файл используется в нескольких cpp-файлах. Понятно, что можно перенести реализацию функции вместе с объектом в соответствующие cpp-файлы, и вопроса не будет. Но лично у меня никаких глюков с описанием в h-файле не возникало, и мне стало интересно - правда ли то, что он сказал, или нет? Собственно, может кто-нибудь точно сказать, возможно ли создание нескольких объектов при подобной технологии? |
18.03.2009, 18:38 | #2 |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
чтобы избежать подключения h-файлов несколько раз делают так
Код:
|
18.03.2009, 18:43 | #3 |
Пользователь
Регистрация: 18.03.2009
Сообщений: 89
|
Да, это все там стоит, я про это тоже говорил. Но человек утверждал, что типа при компиляции все равно эти файлы могут несколько раз обрабатываться.
Например, если в h-файл засунуть ошибку, про нее будет писаться при компиляции каждого cpp-файла, каторый его использует. |
18.03.2009, 19:15 | #4 |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
при объявлении переменной-члена класса она является общей для всех объектов данного типа
http://msdn.microsoft.com/ru-ru/libr...xd(en-us).aspx |
18.03.2009, 22:41 | #5 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Лучше посмотрите на различные реализации паттерна Одиночка (Singleton) и выбирайте что по душе.Хотя, может я просто не люблю статические переменные в функциях/методах
|
18.03.2009, 23:02 | #6 |
Пользователь
Регистрация: 18.03.2009
Сообщений: 89
|
pu4koff, спасибо, термин Singleton до этого не видел. Собственно, у меня нет вопроса в том, как делать. Сделать можно десятью способами. Просто интересно было, как оно в реальности работает.
|
19.03.2009, 00:04 | #7 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Может знакомый ваш имел ввиду, что такое описание метода класса автоматически делает его inline и соответственно все его вызовы, при компиляции, будут заменены телом? Так что я бы тут не стал ручаться, что не появится несколько статических переменных. Мало ли что там в компиляторах намудрили Лучше так не писать всёже и вынести статическую переменную из метода в класс.
|
19.03.2009, 00:11 | #8 |
Пользователь
Регистрация: 18.03.2009
Сообщений: 89
|
Кстати, посмотрел в википедии про singleton. Там есть такой пример:
Код:
|
19.03.2009, 00:42 | #9 |
Maniac
Форумчанин
Регистрация: 03.01.2009
Сообщений: 450
|
В Singleton-не конструктор и деструктор должны быть в private
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
|
19.03.2009, 09:21 | #10 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Основное назначение примеров в вики - это показать идею, а не предоставить готовый код. Кроме того, в вики пример на шаблоне, а описание и реализация шаблонов должны быть в одном модуле, т.е. в *.cpp файл уже не вынесешь ничего.
Вот, кажется, Ваш случай: Креш в синглтоне Мейерса |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
БД в файле | vitamin.rulez | Помощь студентам | 2 | 28.01.2009 17:20 |
Позиция в файле на си | Mixasik | Помощь студентам | 26 | 27.11.2008 01:13 |
Поиск в файле | Zandrey | Microsoft Office Excel | 8 | 05.09.2008 12:23 |
матрица в файле | Mapина | Помощь студентам | 9 | 04.07.2007 10:27 |
Неменяемые обекты | ZhekON | Общие вопросы Delphi | 5 | 09.04.2007 13:43 |