当基类可能被多态使用,其析构函数应该声明为虚函数。
C++类:构造函数(对象创建时调用)、析构函数(对象销毁时调用)、虚函数(实现多态)。构造函数不能为虚。
构造函数不能是虚函数(虚表在构造函数完成后才建立)。析构函数可以且通常应该为虚函数(防止内存泄漏)。
GESP 六级 C++ 面向对象模块,考察虚函数与析构函数的配合。命题人卡住大量考生对"虚函数仅用于成员函数"的刻板认知,忽视虚析构对多态删除的必要性。
看到"多态使用"立刻锁定虚析构:基类指针删除派生对象时,若析构非虚,只会调用基类析构,派生类资源必泄漏。通法:凡作为基类且可能被"基类指针删除"的对象,析构函数必须标 virtual。
错误选项 B 的陷阱在于"绝对化"。命题人利用考生"虚函数仅用于成员函数"的刻板印象,诱导认为"只有显式声明 virtual 才有效"或"只有基类指针删除才需要"。实则只要基类被多态继承,无论删除方式如何,虚析构都必需——这是语言规范而非语义选择。
若命题人把"析构函数"换成"成员函数"或把"多态使用"换成"基类指针调用",答案仍为正确,因为虚析构是语言强制的底层保障。刷到类似题先问:"这题考的是语言规范还是语义建议?"