| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > статический класс |
| Автор: zss 12.1.2006, 19:28 | ||
| хотелось бы создать статический класс, который в конструкторе один раз вызывал бы системную функцию, а после через статические методы можно было бы получать значения (конструктор закрыт) например GetSystemInfo
Но тогда придется получать доступ только через Instance (что не очень удобно) И еще - как тогда удалять этот глобальный объект ? |
| Автор: zss 12.1.2006, 20:10 | ||
а как его удалить ? |
| Автор: Mayk 12.1.2006, 20:38 |
| 1) Он сам удалится при выходе из программы (если использовать синглтон Мейерса, или atexit) или 2) Сделать ф-цию destroy(), которая будет удалять объект или 3) открыть ~System(). |
| Автор: zss 12.1.2006, 20:57 | ||
если не сложно - можно пример (я не встречал такое |
| Автор: DeadSoul 12.1.2006, 22:04 |
| zss, синглетон Мейерса описан во втором посте. И рекомендую книгу Александреску. Там много про синглетоны |
| Автор: Mayk 12.1.2006, 22:23 | ||||
Синглтон Мейерса:
ф-ция atexit: (объект по-прежнему создается при первом обращении.)
зы. о, - комо отказывается принимать указатель на с++ ф-цию в ф-цию atexit |
| Автор: zss 13.1.2006, 15:04 | ||
что-то я не вкурил - как он удалится, если конструктор и деструктор private |
| Автор: blackofe 13.1.2006, 19:39 |
| zss, а что тебя смущает? прятать конструктор и/или деструктор в приват - обычная практика, если ты не хочешь, чтобы твой объект кто-то создавал/убивал со стороны. и, как ты можешь видеть, здесь этого не происходит - в main происходит вызов статического паблик метода. а поскольку это метот данного класса, то он имеет доступ ко всем приватным методам - в т.ч. и к конструктору и деструктору. |
| Автор: zss 14.1.2006, 02:16 | ||
ага... убить его нельзя. А так как это указатель, то при выходе из области видимости он сам не умрет (утечка |
| Автор: Daevaorn 14.1.2006, 16:47 | ||
Вот так: System(){atexit(deleteMe); } при выходе из main() |
| Автор: blackofe 17.1.2006, 20:06 | ||
почитай про функцию atexit(). именно она взводится на удаление объекта по выходу из программы. а, как ты сам можешь видеть, с областью видимости для нее все в порядке - вызывает приватную функцию, но поскольку сама вызывается из члена класса (в данном случае - конструктора), то никаких проблем. |