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

C++中第二个接口类Callable是否需要虚析构函数?

Callable类是否需要虚析构函数?

结论:在你当前的代码场景下,不需要给Callable类添加虚析构函数。

原因分析:

你的代码里所有管理DerivedCallable对象的智能指针,都是从shared_ptr<Base>转换而来的,而Base类已经声明了虚析构函数。当shared_ptr释放对象时,会通过Base的虚析构函数触发完整的析构链,正确调用DerivedCallable的析构函数,完全不需要依赖Callable类的析构函数是否为虚函数。

比如你代码里的callableB,是通过dynamic_pointer_cast从shared_ptr<Base>转换得到的,它共享同一个控制块,析构逻辑依然由Base的虚析构主导,Callable有没有虚析构对对象的正确销毁没有影响。

什么时候需要给Callable加虚析构?

只有当你需要直接用Callable*或者shared_ptr<Callable>来管理DerivedCallable对象时(比如写Callable* p = new DerivedCallable; delete p;这类代码),才必须给Callable添加虚析构函数——否则通过基类指针删除派生类对象会触发未定义行为。但你的代码里完全没有这种使用方式,所以不需要。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:15:38