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

派生类Concrete自定义Strategy析构函数时编译报错求助

问题解决:派生类自定义析构函数的声明错误

错误原因

你在派生类Concrete里错误地将基类Strategy的析构函数声明为自身成员,这违反了C++语法规则——派生类的析构函数必须使用自身类名,而非基类类名,这也是编译器报错的直接原因。

修正后的代码

class Strategy
{
public:
    virtual ~Strategy() = default;
    virtual void doSomething() = 0;
};

class Concrete : public Strategy{
public:
    // 改为派生类自身的析构函数名
    ~Concrete() override; 

    void doSomething() override
    {
        // do something;
    }
};

// 类外实现自定义析构逻辑
Concrete::~Concrete()
{
    // 在这里编写非默认的资源释放代码
}

补充说明

  • 无论是否重写基类虚析构函数,派生类析构函数的名字必须与自身类名一致,这是C++的硬性语法要求。
  • override关键字可以帮你在编译期校验是否正确匹配基类的虚函数签名,这里基类已声明virtual ~Strategy(),所以派生类~Concrete()添加override是合理且推荐的做法。
  • 如果自定义析构逻辑代码简短,也可以直接在类内完成定义:
class Concrete : public Strategy{
public:
    ~Concrete() override
    {
        // 直接编写资源释放逻辑
    }

    void doSomething() override
    {
        // do something;
    }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 19:59:49