Я делаю проект Windows VC++ 2008, и я хочу, чтобы объект, который я создаю, существовал для всех интенсивных и глобальных целей. этот объект должен быть таймером для контроля того, как долго работает программа, и должен быть доступен другим объектам для создания файла журнала. Я знаю, что могу пометить собственные и sudo-native (строковые) члены как внешние, чтобы сделать их доступными, но как мне заставить объект существовать глобально для других объектов. Должен ли я помещать определение объекта перед классом объекта, который должен знать о его существовании (обеспечивая загрузку класса в первую очередь), или я должен поместить в свой основной метод, который разрешает доступ к объекту?
глобальный самосозданный объект
Ответы (2)
То, что вы описываете, часто делается с использованием синглтона.
Вот пример того, как его написать: Singleton: как его использовать
Вот еще один: может ли любой один предоставить мне образец Singleton в С++?
Также обратите внимание: Что плохого в синглтонах?
Просто создайте класс с нужными вам методами, затем объявите экземпляр класса global, включив заголовок класса во все ваши модули, где вы хотите его использовать, а также добавьте декларацию extern, сообщающую модулям, что определение находится в другом месте. Может быть, у вас есть какой-то общий заголовок, который все включают.
extern MyClass yourInstance;
Глобальное определение должно быть там, где main()
MyClass yourInstance;
или, если вы предпочитаете выделять его в куче с помощью указателя, затем выделяйте его в начале основного и удаляйте в конце и просто используйте указатель как глобальный.
тем не менее, обычно нехорошо иметь глобальные объявления, вместо этого вы должны объявить MyClass в main(), а затем передать указатель на него всем функциям/классам, которые вы используете. я бы так и сделал. Тогда вам не нужен оператор extern и просто включите заголовок MyClass.h
одна проблема с глобальными экземплярами заключается в том, что у вас практически нет контроля над тем, когда они создаются/уничтожаются.
sudo
существует только в Unix-подобных средах. В Windows вам нужно обратить внимание на управление учетными записями пользователей (UAC), но вы должны быть очень осторожны. Я сомневаюсь, что вам это нужно для простого таймера. - person Kerrek SB   schedule 06.02.2012