GESP 八级 · GESP 202406 C++ 八级 第 22 题

判断题 · 答案 B · 考点:函数

← 整套速查表 GESP 八级 全部真题

题目

C++ 语言中,可以为同一个类定义多个析构函数。

答案:B

考点

函数

解题思维

C++类:构造函数(对象创建时调用)、析构函数(对象销毁时调用)、虚函数(实现多态)。构造函数不能为虚。

常见错误

构造函数不能是虚函数(虚表在构造函数完成后才建立)。析构函数可以且通常应该为虚函数(防止内存泄漏)。

详细解析(节选)

【考点】C++析构函数唯一性|构造函数重载机制|类成员函数定义规则

GESP八级C++模块,命题人专卡C++初学者对“重载”概念的机械迁移。他们误以为“构造函数能重载,析构函数当然也能”,却忽略析构函数的特殊语义——它是类成员函数,但参数表必须为空,且编译器在对象销毁时只会寻找匹配该类的析构函数,定义两个同名函数,编译器会报错“重定义”。

看到“多个析构函数”,第一反应是“构造函数重载”,第二步立刻刹车——析构函数是成员函数,但它是“类终结者”,编译器在对象销毁时只会寻找匹配该类的析构函数,参数为空且无重载。定义两个同名函数,编译器会报错“重定义”。

选A的考生掉进“参数重载”陷阱,误把“不同参数”当回事——但析构函数参数表必须为空,任何参数都让它不再是析构函数,而是普通成员函数,根本不会被调用。选B是正解,但题目故意用“定义”二字诱导你思考“能不能定义两个”,实则考察你是否记住“只能有一个”。

若改成“一个类能否定义多个有参析构函数”,答案仍是B,因为“有参”就不是析构函数;若改成“一个类能否定义多个同名析构函数但不同签名”,编译器会直接拒收。刷到此类题,先问“这个函数能重载吗?”——不能,就是唯一。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断