企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
## 条款07:为多态基类声明 virtual 析构函数 Declare destructors virtual in polymorphic base classes. ### base class 未使用 virtual 析构函数的问题 当 derived class 对象经由一个 base class 指针被删除,而该 base class 的析构函数是 non-virtual 的,其结果未有定义(通常是调用 base class 的析构函数,而导致 derived 成分没有被销毁)。这种现象称为“局部销毁”,它会造成资源泄漏、败坏数据结构、在调试器上浪费时间等问题。 ### 非 base class 使用 virtual 析构函数的问题 如果 class 不含 virtual 函数,通常表示它并不意图被用作一个 bass class,但如果此时使用 virtual 析构函数会导致对象体积增加。因为想要实现 virtual 函数,对象会携带一个 vptr(virtual table pointer)指针,该指针指向一个由函数指针构成的数组,称为vtbl(virtual table);每一个带有 virtual 的函数的 class 都有一个相应的 vtbl。当对象调用某一 virtual 函数,实际被调用的函数取决于该对象的 vptr 所指向的那个 vtbl。 > 只有当 class 内至少一个 virtual 函数时,才使用析构函数。