派生类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
相关产品推荐
相关产品推荐

