有关下面 C++ 代码的说法,错误的是( )。
struct BiNode {
char data;
BiNode* lchid, *rchid;
};
class BiTree {
private:
BiNode* Creat();
void Release(BiNode* bt);
BiNode* root;
public:
BiTree() {
root = Creat();
}
~BiTree() {
Release(root);
}
};这题考的是C++类与结构体语法,特别是构造函数、析构函数及内存管理。拿到题先别急着看选项,先把代码跑一遍脑内:构造函数里调Creat()分配头结点,析构函数里调Release()回收。记住,题目问的是‘错误的是’,这种反向提问最容易掉坑里。
学生最容易栽在两个地方:一是看到‘析构函数’就脑补成‘必须写’,忽略了C++默认会合成一个空析构函数;二是把‘BiTree’当成‘必须管理资源’的类,其实如果Creat()只返回一个静态对象或根本不分配堆内存,析构函数完全可以省略。另外,题干里‘各种二叉树’这种绝对化表述也要警惕,代码里Creat()和Release()的实现没给,理论上只要它们能处理任意形态的二叉树,A才成立,但命题人往往用‘各种’来设陷阱。
【考点】C++类与结构体|构造函数与析构函数|析构函数RAII
这题考的是对C++类成员函数语义的理解,特别是构造函数、析构函数以及RAII(资源获取即初始化)思想。struct BiNode定义二叉树节点,BiTree类用root指向头指针,构造函数里调用Creat()分配内存,析构函数则负责释放。关键在选项D的绝对化表述。
命题人设陷阱就在‘不可以省略’这个断言上。C++中析构函数确实可选,若BiTree不管理资源(如BiNode结构体)完全可省,编译器会生成默认析构。但BiTree构造函数里显式调用了Creat(),通常意味着要分配堆内存,所以析构函数必须释放,否则内存泄漏。不过,题目只给了类声明,没给Creat()和Release()的具体实现。如果Creat()返回的是一个静态对象或根本不分配堆内存,析构函数就可以省略。因此,‘不可以省略’是绝对化的,错误。
再看其他选项:A说‘适用于构造各种二叉树’,只要Creat()和Release()能处理任意形态的二叉树,A就成立;B说struct BiNode用于构造节点,显然正确;C说构造函数里调用Creat()分配头结点,也正确。所以错误的是D。
思考心法:拿到题先别急着看选项,先把代码跑一遍脑内:构造函数里调Creat()分配头结点,析构函数里调Release()回收。记住,题目问的是‘错误的是’,这种反向提问最容易掉坑里。然后逐项分析:看每个选项是否符合C++语法和语义,特别注意绝对化表述(如‘各种’‘不可以’‘一定’),这些往往是命题人挖的坑。最后结合RAII思想判断:析构函数是否必须存在,取决于类是否管理资源。
避坑:学生最容易栽在两个地方:一是看到‘析构函数’就脑补成‘必须写’,忽略了C++默认会合成一个空析构函数;二是把‘BiTree’当成‘必须管理资源’的类,其实如果Creat()只返回一个静态对象或根本不分配堆内存,析构函数完全可以省略。另外,题干里‘各种二叉树’这种绝对化表述也要警惕,代码里Creat()和Release()的实现没给,理论上只要它们能处理任意形态的二叉树,A才成立,但命题人往往用‘各种’来设陷阱。
考频与趋势:二叉树基础在题库共考过220题,覆盖8个考试级别(2008-2026);逐年分布:2008年2题、2009年2题、2010年4题、2011年3题、2012年1题、2013年3题、2014年1题、2015年4题、2016年3题、2019年3题、2020年1题、2021年4题、2022年2题、2023年20题、2024年60题、2025年67题、2026年28题、null年12题;分赛事:GESP六级100题、GESP七级56题、GESP八级19题、NOIP普及组初赛14题、NOIP提高组初赛9题、CSP提高级8题、CSP入门级8题、GESP五级6题。二叉树遍历在题库共考过201题,覆盖8个考试级别(2007-2026);逐年分布:2007年2题、2008年2题、2010年2题、2011年2题、2012年2题、2013年1题、2015年2题、2019年1题、2021年2题、2022年1题、2023年19题、2024年58题、2025年67题、2026年28题、null年12题;分赛事:GESP六级100题、GESP七级56题、GESP八级19题、NOIP提高组初赛9题、GESP五级6题、NOIP普及组初赛4题、CSP提高级4题、CSP入门级3题。二叉树应用在题库共考过185题,覆盖5个考试级别(2009-2026);逐年分布:2009年1题、2010年3题、2023年18题、2024年57题、2025年66题、2026年28题、null年12题;分赛事:GESP六级100题、GESP七级56题、GESP八级19题、GESP五级6题、NOIP普及组初赛4题。二叉搜索树在题库共考过183题,覆盖6个考试级别(2013-2026);逐年分布:2013年1题、2023年18题、2024年57题、2025年67题、2026年28题、null年12题;分赛事:GESP六级100题、GESP七级56题、GESP八级19题、GESP五级6题、CSP提高级1题、NOIP提高组初赛1题。
预测:基于给定数据,GESP六级中二叉树相关题目占比很高(基础100题、遍历100题、应用100题、BST100题),说明命题人偏爱考查二叉树的各种实现细节和RAII思想。未来可能继续考析构函数是否必须、内存泄漏判断、以及结合RAII的构造函数设计。暂无足够依据预测具体题型变化,但RAII和析构函数的重要性只会更受重视。