首页 > 编程语言 >[C++ Daily] 虚继承与虚析构带来的变化

[C++ Daily] 虚继承与虚析构带来的变化

时间:2024-09-06 15:35:36浏览次数:8  
标签:继承 子类 TS C++ Daily Student 虚析构

虚继承

在菱形继承中,若 Student 和 Teacher 继承于 Person, TS 继承于 Student 和 Teacher,则构造 TS 时会调用两次 Person 的 Construct 和 Destruct 函数,若为虚继承,则不会出现上述问题(此类问题主要解决继承带来的多次非法delete)

原继承:

image-20240906152637082

结果:

image-20240906152651949

虚继承:

image-20240906152532506

结果:

image-20240906152549865

虚析构

父类指针开辟子类指针堆空间时无法调用子类析构函数从而发生内存泄露的问题

原泄露代码:

image-20240906153547358

结果:

image-20240906153602091

造成内存泄漏

虚析构改进:

image-20240906153707673

结果:

image-20240906153723278

标签:继承,子类,TS,C++,Daily,Student,虚析构
From: https://www.cnblogs.com/NekoBlog/p/18400355

相关文章

  • 【C++从练气到飞升】20---RB树
     ......
  • C++编程开发和指针的关系
      指针C/C++windows编程平台的使用使用很多。C++程序设计语言和Java程序设计语言是一样的标准开发语言。程序设计语言的开发类库发布之后会绑定相应的平台。现C++程序设计语言的标准发布之后,使用比较多的图形接口类库是QT。 Java的编程系列是站Java企业级别开发的基础......
  • C++ 合成3/5法则时可能定义为删除的情况
    如果我们未定义拷贝控制成员,编译器会为我们合成;如一个类未定义构造函数,编译器会为我们合成一个默认的构造函数。合成拷贝控制成员可能是删除的情况:如果类中有成员的析构函数是删除的或不可访问的(private):a.则类的合成析构函数被定义为删除的;b.则合成拷贝构造函数被定义为......
  • 信奥赛C++老师解一本通题:1938:【07NOIP普及组】奖学金
    ​【题目描述】某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排......
  • 信奥赛C++老师解一本通题: 1180:分数线划定
    ​ 【题目描述】世博会志愿者的选拔工作正在A市如火如荼的进行。为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m×150%(向下取整)名的选手......
  • 怎样用c++实现一个vector类
    给定的任务是用C++实现一个类,这个类的行为要和标准库中的Vector类一样。向量(Vector)就像动态数组一样,当插入或删除一个元素时,它能够自动调整自身大小,其存储由容器自动管理。vector中的元素被放置在连续的存储空间中,这样就可以使用迭代器来访问和遍历它们。在向量中,数据是在末尾插......
  • 【C++编程题】格雷码与自然二进制码转换
        格雷码是数字信号处理中常用编码方式。格雷码中任意两个相邻代码的二进制位中只有一位不同,对于最大编码和最小编码也成立。1.异或法转换1.1二进制码转格雷码二进制码转格雷码[1]1)将二进制最高位保留;2)对于二进制码中剩余的任意第i位,将其与......
  • 《C++编程规范》五、类的设计与继承
    目录第32条弄清所要编写的是哪种类第32条弄清所要编写的是哪种类了解自我:有很多种不同的类。弄清楚要编写的是哪一种。不同种类的类适用于不同用途,因此遵循着不同的规则。值类(如std::pair,std::vector)模仿的是内置类型。一个值类应该:有一个公用析构函数、复制构造函......
  • C++ STL map/multimap容器
    map/multimap容器Map的特性是,所有元素都会根据元素的键值自动排序。Map所有的元素都是pair,同时拥有实值和键值,pair的第一个元素被视为键值,第二个元素被视为实值,map不允许两个元素有相同的键值。multimap和map的操作类似,唯一区别是multimap的键值可以重复。注意:Map和multimap都......
  • C++(lambda)
    目录1.语法2.示例3.捕获方式4.可变性(mutable关键字)5.Lambda表达式的用途总结C++中的lambda表达式是一种匿名函数,通常用于简化代码,尤其是在处理临时或小型回调函数时。Lambda表达式引入于C++11,并在之后的C++标准中不断增强。它们可以捕获上下文中的变量,生成临时的函数对象......