当前位置: 首页 > news >正文

面试八-存泄漏是什么,有哪几种,怎么解决?

 一、内存泄漏几种情况

         当使用基类指针指向派生类对象时,如果基类的析构函数不是虚函数,那么在使用基类指针来删除这个对象时,只会调用基类的析构函数,而不会调用派生类的析构函数。这就导致了派生类中的资源无法正确释放,从而可能导致内存泄漏或者未定义行为

二、 智能指针有内存泄漏的问题吗

  1. 循环引用(Circular References):如果存在循环引用(例如,两个对象相互持有对方的智能指针),会导致对象永远无法被释放,从而造成内存泄漏。为了避免循环引用,可以使用std::weak_ptr来打破循环。

  2. 裸指针转换(Raw Pointer Conversion):如果将智能指针转换为裸指针,并在转换后使用裸指针来管理资源,容易造成资源

  3. 泄漏。因为裸指针无法感知智能指针的生命周期,无法自动释放资源。应该尽量避免使用裸指针,或者在必要时使用智能指针的get()函数获取裸指针。

  4. 多线程环境下的问题:在多线程环境下,如果智能指针的引用计数没有正确地进行同步,可能会导致资源的提前释放或内存泄漏。因此,在多线程环境下,需要确保对智能指针的操作是线程安全的。

三、请说说new/delete与malloc/free的区别?

       野指针是指指针指向的内存地址是随机的、未初始化的,或者指向的内存区域未经过分配。野指针可能是在创建指针后没有给它赋值(即未初始化指针),或者是在释放内存后未将指针置空,但继续使用该指针。 

四、 多态

         

  1. 静态多态(编译时多态)

    • 静态多态是在编译时确定调用的函数,通常通过重载(Overloading)来实现。重载是指在同一个作用域中定义了多个同名的函数,但它们的参数列表不同。编译器根据调用时的参数类型来选择合适的函数进行调用。这种多态性的实现方式是在编译时完成的,因此也称为编译时多态。
    • 静态多态的优点是效率高,因为调用的函数在编译时就已经确定,无需在运行时进行额外的查找和计算。但缺点是对于同一个函数名,只能根据参数类型来进行选择,不能根据对象的实际类型来确定调用的函数。
  2. 动态多态(运行时多态)

    • 动态多态是在运行时确定调用的函数,通常通过虚函数(Virtual Function)和继承来实现。虚函数是在基类中声明为虚函数的函数,它可以在派生类中进行重写(Override)。当基类指针或引用指向派生类对象,并通过虚函数调用时,根据对象的实际类型来确定调用的函数,实现动态绑定。这种多态性的实现方式是在运行时完成的,因此也称为运行时多态。
    • 动态多态的优点是能够根据对象的实际类型来确定调用的函数,实现灵活的多态性。但缺点是在运行时需要额外的开销来查找虚函数表并确定调用的函数,可能会有一定的性能损失。

相关文章:

  • vue实现图片懒加载
  • 网络编程——大端序小端序
  • 力扣爆刷第141天之二叉树十连刷(翻转、对称、深度、平衡、路径)
  • 解密Prompt系列15. LLM Agent之数据库应用设计:DIN C3 SQL-Palm BIRD
  • 上海汇正财经官网怎么样?客户好评如潮,口碑赞誉之声不绝于耳
  • 机器学习-6-对随机梯度下降算法SGD的理解
  • R可视化:可直接发表的柱状图
  • 前端面试问题:子组件的某一个方法调用执行逻辑由父组件的属性状态变化来决定
  • 【Godot4.2】Godot中的继承与组合
  • 832. 翻转图像 - 力扣
  • 数码论坛|基于SprinBoot+vue的数码论坛系统(源码+数据库+文档)
  • web自动化的断言和日志封装
  • 计算机体系结构期末快速复习
  • numpy向量的转置与向量相乘
  • 【大模型】 基于AI和全球化进程的权衡:开源大模型与闭源大模型
  • 『大模型笔记』从基础原理出发提升深度学习性能
  • docker部署kafka实战
  • SpringBoot自定义starter
  • 软件无线电学习-第二代移动通信系统过程理解
  • 【计算机网络】第三章——回退N帧协议
  • 日月谭天丨赖清德强推“脱中入北”是把台湾带向死路
  • 第五届全国医院人文管理路演在昆山举办:患者体验才是温度计
  • 油电同智,安全超充!从上海车展看中国汽车产业先发优势
  • 一个失败的赛季咎由自取,皇马只能把希望留到夏天
  • 坤莹·帕塔玛·利斯达特拉任世界羽联主席
  • 手机号旧机主信用卡欠款、新机主被催收骚扰四年,光大银行济南分行回应