You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

全局对象构造函数中调用工厂成员函数为何会挂起?

静态对象构造中调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:42:59