是java把人给养废了还是c++的坑太多?

#include <iostream>
#include <string>
#include <vector>using namespace std;class A {public:string str;A(const string &s):str(s){}~A() {cout << "destruct A\n";}};class Base {
};
class B: public Base{public:A a;vector<int> vec;B(const vector<int> &v, A &a1):vec(v), a(a1){}
};int main() {//A *a = new A("hello");//delete a;vector<int> vec(100,5);A a("aaa");Base *b = new B(vec,a);delete b;return 0;
}

上面的程序有问题吗?

很严重的内存泄露。

C++的多态是通过虚函数实现的,要是不把Base的析构函数设为virtual的,在delete时,就调用base的析构函数了,而不是调用B的析构,然后B中有成员变量vec就没法释放了。

解决办法很简单,就是在base中添加个virtual的析构函数就行了。

先回忆下类的构造顺序,先构造基类,再构造派生类

具体的讲就是在构造类的时候,先构造基类,在构造当前类的成员变量,最后调用当前类的构造函数

析构的时候顺序相反

看上面的程序,delete b的时候,因为Base没有virtual的析构函数,所以,只会调用Base的析构函数,而不会调用B的析构函数,因为B的成员变量是在调用B的析构函数只会再析构的,所以,B的成员变量也不会被析构

刚开始看B类,是两个非指针类型的成员变量,所以,即使没有调用B类的默认生成的析构函数,只调用Base类的析构函数,应该也不会有内存泄露。但是,要注意的是,string和vector内部实现都只是一个指针,然后向堆中申请内存,如果不调用默认生成的析构函数,那么也不会析构string和vector,造成内存泄露。

解决方案:如果有继承的话,基类一定要有虚析构函数

这是要把前几年积累的C++的节操给丢光吗相关推荐

  1. 无源波分和彩光模块_5G前传WDM解决方案,无源波分和彩光模块

    原标题:5G前传WDM解决方案,无源波分和彩光模块 5G承载网一般分为城域接入层,城域汇聚层和城域核心层/省干线,来实现5G业务的前传.中传和回传.而光模块主要用于实现各层设备之间的互连,5G前传是城 ...

  2. 5G前传、中传、回传应用中的光模块

    一.什么是5G前传.中传与回传? 5G网络推动了光模块的市场需求,5G网络为用户提供高可靠.高速率.高安全.低时延.长续航等特点.5G传输网络有前传.中传和回传组成,它们将蜂窝基站.核心网络和数据中心 ...

  3. 前向渲染路径细节 Forward Rendering Path Details

    正向渲染路径细节 Forward Rendering Path Details Forward Rendering path renders each object in one or more pa ...

  4. 无源波分和彩光模块_周末干货|无源波分技术及其在4G/5G前传中的应用

    原标题:周末干货|无源波分技术及其在4G/5G前传中的应用 1.无源波分前传方案简述 无源波分采用WDM技术,将BBU/DU至不同RRU/AAU的电路采用不同的波长合路到一根光纤中传输.例如,一个4G ...

  5. Python是一门杰出的语言,值得你去学习

    为什么要将Python作为第一门语言来学习呢,理由有很多,就像<Python编程:从入门到实践>中说的. Python是一种效率极高的语言:相比于众多其他的语言,使用Python编写时,程 ...

  6. 亚马逊:从零售商向科技公司的质变

    报告来源:国泰君安(訾猛) 亚马逊以技术为核心驱动力,实现从电商向科技公司的跨越,形成电商.物流.AWS.新零售协同发展的完整生态圈. 亚马逊从1995年开始为用户提供线上商品,从一家网上书店发展成全 ...

  7. 基于i.MX RT电磁智能车AI算法的一些讨论

      该文发布后得到了热烈的反响,也有学生提出了一些问题,典型的是适应性问题,如下:   也另外有专家针对这些问题提出了自己的看法:   在此,我想分享一下我们在进行相应的测试和实验过程中,所遇到的问题 ...

  8. 软件测试用例优秀例子_最全软件测试面试题汇总

    原创: 软件测试大师 软件测试大师 昨天 软件测试面试题 尘世沧桑,微笑向暖 1.你的 测试 职业发展是什么? 测试经验越多,测试能力越高.所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔 ...

  9. 小白一路走来,连续刷题三年,谈谈我的算法学习经验

    数据结构与算法应该算是一个比较难的模块,从小白一路走过来,从大一连续刷过好几年题,看过挺多书,踩过挺多坑,也涨了一些经验,姑且在这里分析一波对数据结构与算法 的学习经验,请耐心看完,相信对你会有所帮助 ...

最新文章

  1. 什么是离散的Hopfield网络?
  2. Postgresql 物理热备份 -- PITR 时间点恢复(Point In Time Recovery)
  3. Android应用实例收藏管理
  4. php 取绝对值(php自带函数可以直接取)
  5. 如何处理alert、confirm、prompt对话框
  6. 多款主流编程语言,哪款开发软件最安全?
  7. background-image使用svg如何改变颜色
  8. Hexo使用细节及各种问题
  9. Python中的or和and运算符的使用
  10. 西门子Mendix发低代码最新报告趋势:客户体验先行、智能化和全渠道化
  11. jsp中EL表达式不好使
  12. xilinx sdk查看结构体定义open declaration
  13. 拓端tecdat|matlab预测ARMA-GARCH 条件均值和方差模型
  14. 手把手教你安装Sketch破解版和measure插件 1
  15. 【论文翻译】从零开始PointNet论文分析与代码复现
  16. 微信小程序——1、搭建自己的Https服务器
  17. ssh外网访问内网服务器
  18. 手机低端市场,联发科 vs 高通
  19. Matplotlib 绘制折线图 - 正余弦函数图像
  20. android简易计算器

热门文章

  1. 解决 pandas 读取数据时内存过大的问题
  2. 八、Flume的构架,安装和基本使用
  3. 解决oracle绑定变量重复,基于ORACLE SQL优化之绑定变量(4)
  4. 对凸优化(Convex Optimization)的一些浅显理解
  5. 今日arXiv精选 | 13篇EMNLP 2021最新论文
  6. 报名 | TensorFlow China Roadshow 正式开启
  7. 岗位内推 | 微软亚洲互联网工程院自然语言处理组招聘
  8. AI Challenger 2018 机器翻译参赛总结
  9. Java 图形用户界面(GUI)布局管理器
  10. python面向对象继承_Python 面向对象 --- 继承