Цитата(Andy Mozzhevilov @ Sep 23 2010, 21:17)

Вызывать отдельно Инит для каждого объекта - это надо не забыть об этом.
На самом деле я маленько слукавил

Если на пальцах, то у меня юсается следующая архитектура:
1) Реализована система широковещательных посылок. Те посылка (объект) не имеет адресата, она лишь имеет характеристику "тип посылки". (те посылки могут иметь тип "int", тип "ClSlon" и тд - типом посылки может быть любой тип, который может быть параметром шаблона (особенности реализации)). Объекты могут подписываться на определенный тип сообщений. Адресант сообщений ничего не знает об адресатах.
2) Есть сообщения типа "Init", "Run"
3) Все сервисы наследуются от базового класса, который подписан на сообщения Init, Run и при их получении вызывает свои виртульные методы.
Соответственно, в main-е я просто посылаю широковещательные сообщения, а сервисы их ловят и происходят необходимые действия. Таким образом я исключаю возможность "забыть проинициализировать" объект. Да и вообще - я в main-е ничего о них не знаю
Цитата(Andy Mozzhevilov @ Sep 23 2010, 21:17)

Объект, который мне нужно заинитить первым - он один в системе.
Точнее нужно вызвать инициализацию ОС, чтобы в конструкторах всех глобальных объектов можно было использовать функции ОС по созданию сервисов (семафоров, очередей и т.п.).
Тогда прямая дорога - использование синглетонов. Самый простейший (не самый лучший) способ:
Код
template <class T>
class TClSingleton
{
public:
inline static T& Instance()
{
static T clObj_;
retrun T;
}
};
class ClSingleObject: public TClSingleton<ClSingleObject>
{
frined class TClSingleton<ClSingleObject>;
private:
ClSingleObject(){...}
ClSingleObject(const ClSingleObject&){..}
public:
void fun();
};
* * *
ClSingleObject::Instance()->fun();
* * *
В крайней строчке мы вызываем метод объекта, причем не имея самого объекта. Он будет создан при первом вызове и не будет продублирован при последующих.