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

C++继承模板类的派生类构造函数未调用问题求解

问题原因分析

核心原因是C++构造函数内调用虚函数不会触发多态调度,且基类Init抛出异常中断了对象构造流程,具体执行逻辑如下:

  1. C++派生类对象的构造顺序为:先执行基类构造函数,再执行派生类构造函数。在基类构造函数执行期间,对象的动态类型仍为基类,虚函数调用只会调度到基类的实现,不会走到派生类的重写版本。
  2. 你的代码执行流程:
    • 调用E_Event::Get()触发new E_Event()逻辑
    • 先执行基类Event<E_EventArgs>的构造函数,打印Event()
    • 基类构造函数内调用Init():此时触发的是基类实现的Init(),直接抛出EventNotInitialized异常
    • 异常抛出后,构造流程直接中断,已经构造的基类部分会被回滚析构,派生类E_Event的构造函数完全没有执行机会,因此看不到派生类相关的日志输出。
修复建议
  • 不要在构造/析构函数内调用虚函数,这是C++的经典使用陷阱,无法实现预期的多态效果。
  • 如果需要执行多态初始化逻辑,可以将Init()调用移到派生类构造完成后手动触发,或者修改为非虚函数的明确调度逻辑。
  • 你当前的E_Event构造函数内也写了Init()调用,即使构造流程正常也会导致Init()重复执行,需要同步调整。

内容的提问来源于stack exchange,提问作者Silver

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:57:04