A Счетчик Schwartz предназначен для обеспечения того, чтобы глобальный объект инициализировался до его использования.
Пожалуйста, обратите внимание на использование счетчика Schwartz, показанного ниже.
Файл Foo.h:
class Foo
{
Foo::Foo();
};
Файл Foo.cpp:
#include "Foo.h"
// Assume including Mystream.h provides access to myStream and that
// it causes creation of a file-static object that initializes
// myStream (aka a Schwartz counter).
#include "MyStream.h"
Foo::Foo()
{
myStream << "Hello world\n";
}
Если Foo:: Foo() запускается после запуска main(), использование myStream гарантированно будет безопасным (т.е. myStream будет инициализирован перед использованием) из-за объекта статического инициализатора файла, упомянутого в комментариях.
Однако предположим, что экземпляр Foo создается до начала main(), как это было бы, если бы оно было глобальным. Это показано здесь:
Файл Global.cpp:
#include "Foo.h"
Foo foo;
Обратите внимание, что Global.cpp не получает файл-статический объект инициализации, например Foo.cpp,. В этом случае, как счетчик Schwartz гарантирует, что инициализатор MyStream (и, следовательно, сам объект MyStream) инициализируется до foo? Или может ли счетчик Шварца потерпеть неудачу в этом случае?