美文网首页
警告:deleting object of polymorphi

警告:deleting object of polymorphi

作者: 锋之律 | 来源:发表于2019-08-02 13:26 被阅读0次

    原来如果基类里有虚函数,定义了基类指针指向派生类,就会需要定义基类虚析构,这样,基类指针析构的时候,就会先析构派生类,再析构基类。

    如果不定义虚析构,就会基类指针直接析构基类。这样派生类对象销毁不完整。所以编译器会告诉你,警告你的。

    #include <iostream> 
    
    using namespace std;
    
    // 基类A
    class A{
    public:
        virtual ~A(){}; // 定义基类的虚析构函数,若不定义该函数,则会出现警告信息
        virtual void  display(){  cout<<"A"<<endl; }    // 虚函数display()
    };
    
    // 派生类B 
    class B :  public A{
    public:
        void  display(){ cout<<"B"<<endl; }
    };
    
    void doDisplay(A *p)    // 定义基类指针
    {
        p->display();   // 当函数参数为new B()时,定义的基类指针指向派生类,此时需要定义基类虚析构函数
        delete p;
    }
     
    int main()
    {
        doDisplay(new B());
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:警告:deleting object of polymorphi

          本文链接:https://www.haomeiwen.com/subject/ufkldctx.html