【发布时间】:2012-02-12 19:08:14
【问题描述】:
Schwartz counter 旨在确保在使用全局对象之前对其进行初始化。
请考虑使用如下所示的施瓦茨计数器。
文件 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() 启动后运行,由于 cmets 中提到的文件静态初始化器对象,myStream 的使用可以保证是安全的(即 myStream 将在使用前被初始化)。
但是,假设 Foo 实例是在 main() 启动之前创建的,如果它是全局的就会发生这种情况。此处显示:
文件 Global.cpp:
#include "Foo.h"
Foo foo;
请注意,Global.cpp 不像 Foo.cpp 那样获得文件静态初始化器对象。在这种情况下,Schwartz 计数器如何确保 MyStream 初始化程序(以及 MyStream 对象本身)在 foo 之前初始化?或者在这种情况下施瓦茨计数器会失败吗?
【问题讨论】:
标签: c++