全局对象构造函数中调用工厂成员函数为何会挂起?
静态对象构造中调用DLL工厂函数导致挂起的问题
由于无法访问所用动态库(DLL)的定义,无法提供工厂模式的完整最小可复现示例,希望获取参考资料建议,或者如果问题属于通用情况、无需了解函数定义就能解释,盼得到解答。
根据DLL提供的文档,某种工厂模式变体支持以下代码编译并正常运行:
int main(){ std::cout << "Start" << std::endl; Base* ptr = Base::Create(); ptr->ConcreteMemberDoSomething(); std::cout << "End" << std::endl; }
输出结果:
Start /-- Concrete Member... Output --/ End
但以下代码可以编译,运行时却会持续挂起:
class Init{ public: Base* ptr; Init(){ std::cout << "Ctor start" << std::endl; ptr = Base::Create(); std::cout << "Ctor end" << std::endl; }; ~Init(){ std::cout << "Dtor" << std::endl; }; } Init obj; int main(){ std::cout << "Start" << std::endl; obj.ptr->ConcreteMemberDoSomething(); std::cout << "End" << std::endl; }
输出结果:
Ctor start
我知道需要对main()做更多调试,但不理解Init构造函数为何会冻结。我担心这和静态初始化顺序问题有关,但因为无法访问动态库中的任何定义,不知道该尝试哪些解决方案。
内容的提问来源于stack exchange,提问作者CoilKid
相关产品推荐
相关产品推荐

