C++ 在Windows中初始化静态对象(对于类工厂)
我正在VisualStudio2008中编写一个类工厂,其中的类正在进行自我注册。类工厂是一个单例,类自己注册如下: 在工厂里C++ 在Windows中初始化静态对象(对于类工厂),c++,visual-studio-2008,class-factory,C++,Visual Studio 2008,Class Factory,我正在VisualStudio2008中编写一个类工厂,其中的类正在进行自我注册。类工厂是一个单例,类自己注册如下: 在工厂里 class Factory {...}; template<typename T> class Register { public: Register() { Factory::instance().register<T>(); } }; 在SomeRegisteredClass.cpp中 #incl
class Factory {...};
template<typename T>
class Register
{
public:
Register()
{
Factory::instance().register<T>();
}
};
在SomeRegisteredClass.cpp中
#include <Factory.h>
class SomeRegisteredClass : public ISomeInterface
{
};
static Register<SomeRegisteredClass> register;
然而,在运行时,寄存器的构造函数从未被调用,因此,SomeClass从未被注册。我怀疑有一些优化正在进行,它优化了SomeRegisteredClass.cpp中的内容,因为SomeClass没有直接在代码中的其他任何地方使用,而只是通过其接口使用。可能是这样,我怎样才能禁用它
编辑1:
所有这些内容都被编译到一个静态库中,该库链接到一个可执行文件 事实上,全局变量是一个雷区,除非在转换单元中使用函数或变量,否则不能保证初始化此变量。恐怕我不能提供一个建设性的答案,除了不使用globals。