C++虚析构函数必要性解析_C++避免内存泄漏的关键机制

admin 百科 12
虚析构函数解决通过基类指针删除派生类对象时派生类析构逻辑被跳过的问题,防止资源泄漏和未定义行为。

C++虚析构函数必要性解析_C++避免内存泄漏的关键机制-第1张图片-佛山资讯网

当用基类指针删除派生类对象时,若基类析构函数不是虚函数,派生类的析构逻辑将被跳过,导致资源未释放、内存泄漏甚至未定义行为。虚析构函数是C++多态销毁场景下保障资源正确释放的强制约定。

虚析构函数解决什么问题

核心问题是“通过基类指针 delete 派生类对象”时的析构行为不完整。C++规定:非虚析构函数只调用当前指针静态类型的析构函数,不会自动触发派生类部分。

例如:

class Base {
  public:
    ~Base() { cout };
class Derived : public Base {
  int* data;
  public:
    Derived() : data(new int[100]) {}
    ~Derived() { delete[] data; cout };
Base* p = new Derived();
delete p; // 仅调用 Base::~Base(),data 泄漏!

立即学习“C++免费学习笔记(深入)”;

什么时候必须声明为虚析构函数

只要一个类设计为多态基类(即预期有派生类,并通过基类指针/引用管理对象生命周期),就必须将析构函数声明为 virtual。

标签: c++

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~