C++:多态里父类的析构函数造成子类内存泄露的问题

真的该抽出时间看一看C++,BAT笔试中总是有C++,自己总是拿java的思维想C++,还大部分都是错的O(∩_∩)O,主要还是大一的时候不好好学习,连基本的C++素养都没有,So Stupid...
新鲜出炉的阿里C++笔试题( ̄ ̄)"
#include <iostream>
using namespace std;
class A {
public:
    A()
    {
        cout<<"A()"<<endl;
    }
    
    ~A()
    {
        cout<<"~A()"<<endl;
    }
};
class B: public A {
public:
    B()
    {
        cout<<"B()"<<endl;
    }
    
    ~B()
    {
        cout<<"~B()"<<endl;
    }
};

int main() {
    A* pA = new B();
    delete pA;
    B* pB = new B();
    delete pB;
    return 0;
}

运行结果:

A()
B()
~A()
A()
B()
~B()
~A()
  • 真他妈奇怪,竟然没有调用~B(),这C++多态到底是干什么的,难道就这样华丽丽的内存泄露啦w(゚Д゚)w

经过查找资料,原来需要在父类的析构函数中加上virtual关键字,so stupidO(∩_∩)O,代码修改如下:

#include <iostream>
using namespace std;
class A {
public:
    A()
    {
        cout<<"A()"<<endl;
    }
    
    virtual ~A()
    {
        cout<<"~A()"<<endl;
    }
};
class B: public A {
public:
    B()
    {
        cout<<"B()"<<endl;
    }
    
    ~B()
    {
        cout<<"~B()"<<endl;
    }
};

int main() {
    A* pA = new B();
    delete pA;
    B* pB = new B();
    delete pB;
    return 0;
}

再次运行:

A()
B()
~B()
~A()
A()
B()
~B()
~A()

哎呀妈,这C++,还是C++--(JAVA)省心,永远不用洗碗O(∩_∩)O:

class A {
    public A() {
        System.out.println("A()");
    }   
}

public class Main extends A{
    public Main() {
        System.out.println("Main()");
    }
    
    public static void main(String[] args)  {
        A a = new Main();
        Main main = new Main();
    }
}

运行结果:

A()
Main()
A()
Main()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,645评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,955评论 18 399
  • 今天出去的路上,忽然发现自己慢慢的在改变了。 算是值得高兴的一件事吧,但也不尽是好事,自己或许真的不是以前的自己了...
    只有一个命运阅读 3,449评论 0 2
  • 三星电子将在今晚发布迟到的年度旗舰——Galaxy S8手机。 由于去年Note 7的电池问题,导致S8并没能像以...
    败叔阅读 1,891评论 0 0
  • IntelliJ IDEA的在线注册码生成页面http://idea.iteblog.com现在激活码被封了,需要...
    lsh的学习笔记阅读 9,502评论 0 4