zoukankan      html  css  js  c++  java
  • 关于为什么在有继承关系的类结构中,析构函数destructor要是virtual以及如果不是会发生什么

    #include <iostream>
     using namespace std;
     
     class Base
     {
     public:
         Base(){cout<<"Base constructor"<<endl;}
         ~Base(){cout<<"Base dectructor"<<endl;}
     };
     
     class Derived : public Base
     {
     public:
         Derived(){cout<<"Derived constructor"<<endl;}
         ~Derived(){cout<<"Derived destructor"<<endl;}
     };
     
     int main()
     {
         Base * p = new Derived();
         delete p;
         return 1;
     }
     

    输出结果是:

    Base constructor
    Derived constructor
    Base dectructor
     

    可以很明显的看出,在使用

    Base * p = new Derived();

    基类指针来生成子类对象的时候,系统可以自动调用子类对象的构造函数。

    但是在

    delete p;

    的时候,p还是一个基类指针,我们观察到子类的析构函数没有被调用,那么就会发生内存泄漏。

  • 相关阅读:
    毕设进度28
    任务27
    任务26
    任务25
    任务24
    第二次冲刺
    课堂作业-搜狗输入法
    课堂作业-寻找水王
    博客花园典型用户和场景
    第十天
  • 原文地址:https://www.cnblogs.com/lihaozy/p/2683782.html
Copyright © 2011-2022 走看看