Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как сделать объект доступным все


Автор: Paradox 25.2.2003, 15:11
Хочу создать свой класс- что-то вроде хранилища разной информации CMyStorage. Во время работы приложение может класть туда информацию, может черпать из него . Необходимо чтобы объект этого класса создавался в самом начале работы, сохранялся все время работы и был доступен из любого места моего приложения - мож кто знает как это сделать.


Автор: BlowFish 25.2.2003, 17:40
объявить объект глобально... Можно не глобально, это зависит от типа твоего приложения

Автор: Step 25.2.2003, 19:04
лучший способ это глобально, можно еще передавать во все классы указатель на объект, но это не удобный метод.

Автор: Paradox 26.2.2003, 02:49
Я уже пытался. Пробовал объявить там же где и theApp, но почему то theApp видно а мой объект нет.
confused.gifconfused.gif?

Автор: Step 26.2.2003, 02:52
для визуала надо объявлять в файле stdafx.h

Автор: Paradox 27.2.2003, 14:11
А как сделать так чтобы объект создавался в самом начале работы приложения ?

Автор: Step 27.2.2003, 18:45
скажи какой объект

Автор: Vyacheslav 27.2.2003, 19:29
Используй паттерн Singleton, единственный экземпляр которого создается автоматически при первом обращении к нему
Код

class Singleton
{
public:
     static Singleton& Instance();
protected:
//это чтобы нельзя было создать самостоятельно через конструктор
     Singlenton();
public:
//здесь все твои методы и данные
      int Var1;
      int Var2;
};

Singleton& Singleton::Instance()
{
 static Singleton* NewSingleton = new Singleton();
 return *NewSingleton;
}



Теперь для того чтобы обратиться к этому объекту в любом месте делаем так
Код

Singleton GlobalSingleton = Singleton::Instance();
GlobalSingleton.Var1 = 122;

или еще проще
Код

Singleton::Instance().Var1 =122;

Объявлять глобальных объектов при этом не требуется. При первом обращении в программе Singleton::Instance() создаст объект. При последующих вызовах он просто вернет уже созданный объект. Если необходимо иметь уже данные инициализированные первоначальным значением, проинициализируй их в конструкторе

Автор: dim 28.2.2003, 02:10
Если нужна экстраинициализация, то преимуществом глобальных объектов является то, что их конструкторы вызываются до main(WinMain).

Автор: Paradox 3.3.2003, 19:55
Vyacheslav, спасибо большое... Все получилось
Всем остальным тоже thanks

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)