цитата из: http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.14 Существует много решений этой проблемы, но очень простое и полностью переносимое решение состоит в замене глобального объекта listOfA глобальной функцией listOfA (), которая возвращает объектссылка.
std::vector<A*>& listOfA()
{
static std::vector<A*> ans;
return ans;
}
Поскольку статические локальные объекты создаются, когда первый раз управление переходит над их объявлением (только), вышеупомянутая новая инструкция listOfA () будет происходить только один раз: первый раз вызывается listOfA ().Каждый последующий вызов вернет один и тот же объект.Затем все, что вам нужно сделать, это изменить использование listOfA на listOfA ():
int _tmain(int argc, _TCHAR* argv[])
{
// do stuff
A::listOfA().dostuff();
// do stuff
}
Это называется идиомой Construct On First Use, потому что он делает именно это: глобальный объект Fred создается при его первом использовании.
Недостатком этого подхода является то, что объект никогда не разрушается.Есть другой метод, который отвечает на эту проблему, но его нужно использовать с осторожностью, поскольку он создает возможность другой (столь же неприятной) проблемы.
[Редактировать] Извините, не видел, что вы уже связалиськ часто задаваемым вопросамОн заслуживает похвалы [/ Edit]