我正在使用静态初始化来简化在 C++ 中使用工厂注册某些类的过程。不幸的是,我认为编译器正在优化“未使用”的对象,这些对象旨在在其构造函数中完成有用的工作。有没有办法告诉编译器不要优化全局变量?
class SomeClass {
public:
SomeClass() {
/* do something useful */
}
};
SomeClass instance;
SomeClass 的构造函数中的断点没有被命中。在我的实际代码中, SomeClass 在头文件中,而实例在源文件中,或多或少是单独的。
编辑:正如 KJAWolf 所猜测的,这段代码实际上被编译成一个静态库,而不是可执行文件。其目的是将静态库也提供的某些类型注册到类型及其创建者的静态列表中,以便工厂在构造时从中读取。由于这些类型是随 lib 提供的,因此不希望将此代码添加到可执行文件中。
我还发现,通过将代码移动到另一个包含其他现有代码的源文件,它可以正常工作。似乎有一个完全由这些全局对象组成的文件是导致问题的原因。就好像那个翻译单元被完全忽略了。