глобальный самостоятельно созданный объект - PullRequest
1 голос
/ 06 февраля 2012

Я делаю проект Windows VC ++ 2008, и я хочу, чтобы объект, который я создаю, существовал для всех интенсивных целей во всем мире.этот объект должен быть таймером, чтобы контролировать, как долго программа работала, и должен быть доступен другим объектам для генерации файла журнала.Я знаю, что могу пометить нативные и sudo-native (строковые) члены как внешние, чтобы сделать их достижимыми, но как мне сделать так, чтобы объект существовал глобально с другими объектами.Должен ли я поместить определение объекта перед классом объекта, который должен знать о его существовании (сначала нужно загрузить класс), или я должен добавить в свой метод метод, который разрешает доступ к объекту?

Ответы [ 2 ]

2 голосов
/ 06 февраля 2012

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

extern MyClass yourInstance;

Глобальное определение должно быть там, где main () равно

MyClass yourInstance;

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

при этом, как правило, нехорошо иметь глобальные объявления, вместо этого вы должны объявить MyClass в main (), а затем передать указатель на него всем функциям / классам, которые ты используешь. Вот как бы я это сделал. Тогда вам не нужно внешнее утверждение и просто включите заголовок MyClass.h

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

1 голос
/ 06 февраля 2012

То, что вы описываете, часто делается с помощью синглтона.

Вот пример того, как написать один: Синглтон: как его использовать

Вот еще один: Может ли кто-нибудь предоставить мне образец синглтона на с ++?

Также обратите внимание: Что плохого в синглетах?

...