GESP 六级 · GESP 202406 C++ 六级 第 18 题

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

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

题目

定义一个类时,必须手动定义一个析构函数,用于释放对象所占用的资源。

答案:B

考点

函数

解题思维

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

常见错误

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

详细解析(节选)

【考点】C++类默认析构函数|编译器隐式定义|资源管理误区

1. 🎯 考纲定位 GESP 六级 C++ 模块,考察类构造函数与析构函数的默认行为。命题人卡住的是初学者对"资源释放"的误解,以为必须手写析构函数才算"正确"。

2. 🧠 解题思维 看到"必须手动定义"先警觉——C++标准规定,若未显式定义,编译器自动生成一个默认析构函数。默认析构函数虽不释放成员资源,但"存在性"是确定的。因此"必须手动定义"这个条件本身就不成立,题目在逻辑上自相矛盾。

3. 🪤 陷阱拆解 选项B"错误"才是正解。命题人利用了两类思维误区:一是"资源管理必须手动"的错觉(其实编译器默认析构函数已存在),二是"定义=释放"的偷换(默认析构函数存在但不释放)。若只背结论不读条件,会误选A。

4. 🔄 反命题思维 若改题成"定义一个类时,编译器会自动生成默认析构函数",则答案为A;若改成"定义一个类时,必须手动定义构造函数",则答案为B。刷到类似题,先问"命题人想考我默认行为还是资源管理?"

同考点真题

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