zoukankan      html  css  js  c++  java
  • 为多态基类声明多态析构函数

    考虑以下类的结构:

    class Base
    {
    public:
    	Base(){}
    	~Base(){}
    	virtual void doSth(){}
    };
    class Derived:public Base
    {
    public:
    	Derived(){}
    	~Derived(){}
    	void doSth(){}
    };
    

      假设接下来有如下代码:

    Base* b=new Derived;
    delete b;
    

       那么当进行到delete b这一句的时候会发生内存泄露。因为C++明确指出,当derived class对象经由一个base class指针被删除,而该base class带着一个non-virtual析构函数,其结果是未定义的,通常发生的是对象的derived class成分未被销毁。

         消除这个问题的做法是给base class一个virtual的析构函数:

    class Base
    {
    public:
    	Base(){}
    	virtual ~Base(){}
    	virtual void doSth(){}
    };
    

      一般而言,只有当基类具有virtual函数,或者说是为了具备多态性的时候,才有必要声明virtual的析构函数。

  • 相关阅读:
    文言文
    【我回来了】TO DO LIST
    AFO
    [DP]
    [CF1221F]Choose a Square
    关于博主(2)
    自我介绍( 并不?
    老年选手的复健之路
    CSP/NOIP 2019 游记
    CSP前模板复习
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/5590102.html
Copyright © 2011-2022 走看看