c++926

1.什么是虚函数?什么是纯虚函数?

  • 虚函数:被`virtual`关键字修饰的成员函数,用于实现多态性,通过基类访问派生类的函数。
  • 纯虚函数:在虚函数后面添加`=0`,只有声明而没有实现,需要派生类提供实现。

2.基类为什么需要虚析构函数?

虚析构函数是为了解决父类指针指向子类对象时,释放子类对象的资源时,释放不完全,造成的内存泄漏问题。

3.如何初始化const和static数据成员?

初始化const

在构造函数初始化列表中初始化

在声明时直接初始化

初始化 static 成员:

在类定义之外初始化

在声明时直接初始化

4.指针和引用的区别

  • 定义

    • 指针是一个变量,其值为另一个变量的内存地址。

    • 引用是一个别名,它是一个已存在变量的别名。

  • 语法

    • 指针使用*来声明指针变量和访问指针所指向的值。

    • 引用使用&来声明引用,但在使用时不需要使用&

  • 空值

    • 指针可以指向空值(nullptr)。

    • 引用必须在定义时初始化,且不允许指向空值。

  • 重新赋值

    • 指针可以在程序运行时重新指向不同的变量。

    • 引用在初始化后不可改变指向的变量。

  • 运算符重载

    • 指针可以进行运算,如指针加减操作。

    • 引用不支持运算符重载。

  • 传递参数

    • 指针作为参数传递时,传递的是地址,对参数的修改会影响原变量。

    • 引用作为参数传递时,传递的是原变量的别名,对参数的修改也会影响原变量。

5.new和malloc的区别

new 和 malloc 都是用于在内存中动态分配空间的方法,但在C++中,它们有一些重要的区别。

  1. new 是C++中的运算符,而 malloc 是C语言中的函数。因此,new 提供了更多的功能和类型安全性。

  2. 使用 new 分配内存时,不需要指定要分配的内存大小,因为它会根据所需的类型自动计算大小。而 malloc 需要显式指定要分配的内存大小。

  3. new 返回的是所分配类型的指针,而 malloc 返回的是 void 类型的指针,需要进行类型转换。

  4. new 会调用对象的构造函数,而 malloc 不会。这意味着使用 new 分配的内存可以自动初始化为默认值,而使用 malloc 分配的内存则需要手动初始化。

6.内存泄漏怎么产生的?如何避免?

内存泄漏是指程序在动态分配内存后,由于某种原因未释放已分配的内存,导致系统无法再次使用这部分内存。内存泄漏通常发生在程序中频繁动态分配内存的情况下,如果程序没有正确释放已分配的内存,就会导致内存泄漏。

内存泄漏的产生原因可能包括以下几点:

1,指针重新赋值
2,错误的内存释放
3,返回值的不正确处理

为了避免内存泄漏,可以采取以下几种方法:

确保没有在访问空指针。
每个内存分配函数都应该有一个 free 函数与之对应,alloca 函数除外。
每次分配内存之后都应该及时进行初始化,可以结合 memset 函数进行初始化,calloc 函数除外。
每当向指针写入值时,都要确保对可用字节数和所写入的字节数进行交叉核对。
在对指针赋值前,一定要确保没有内存位置会变为孤立的。
每当释放结构化的元素(而该元素又包含指向动态分配的内存位置的指针)时,都应先遍历子内存位置并从那里开始释放,然后再遍历回父节点。
始终正确处理返回动态分配的内存引用的函数返回值。

7.C++的内存分区

在C++中,内存分区是指程序运行时内存空间的划分。C++程序在运行时会将内存划分为几个不同的区域,主要包括以下几个部分:

  1. 栈(Stack):栈用于存储函数的参数值、局部变量的值等。每当调用一个函数时,函数的参数值和局部变量会被存储在栈内存中,函数执行完毕后这些数据会被自动释放。

  2. 堆(Heap):堆用于动态分配内存,程序员可以在堆上手动分配和释放内存。在堆上分配的内存需要程序员手动释放,否则会导致内存泄漏。

  3. 全局/静态存储区(Global/Static Storage):全局变量和静态变量存储在这个区域。全局变量在程序整个运行周期内都存在,而静态变量在程序执行过程中始终存在,直到程序结束。

  4. 常量存储区(Constant Storage):存储常量变量,如字符串常量等。这些数据在程序运行期间不可修改。

  5. 代码区(Code):存储程序的代码,包括函数的机器码等。这部分内存通常是只读的,不允许进行写操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/437487.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用ssm实现基于HTML的中国传统面食介绍网站的搭建+vue

TOC ssm758基于HTML的中国传统面食介绍网站的搭建vue 第1章 绪论 1.1选题动因 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔…

SkyWalking 高可用

生产环境中,后端应用需要支持高吞吐量并且支持高可用来保证服务的稳定,因此需要高可用集群管理。 集群方案 Skywalking集群是将 skywalking oap 作为一个服务注册到nacos上,只要skywalking oap服务没有全部宕机,保证有一个skywal…

electron出现乱码和使用cmd出现乱码

第一种出现乱码。这种可以通过chcp 65001,设置为utf-8的编码。第二种,是执行exec的时候出现乱码,这个时候需要设置一些编码格式,可以通过iconv-lite进行解决,这个方法是node自带的,所以不需要导入。使用方法…

SpringCloud-基于Docker和Docker-Compose的项目部署

一、初始化环境 1. 卸载旧版本 首先,卸载可能已存在的旧版本 Docker。如果您不确定是否安装过,可以直接执行以下命令: sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logro…

openpnp - 底部相机高级校正的参数设置

文章目录 openpnp - 底部相机高级校正的参数设置概述笔记修改 “Radial Lines Per Calibration Z” 的方法不同 “Radial Lines Per Calibration Z”的校验结果不同 “Radial Lines Per Calibration Z”的设备校验动作的比较总结备注END openpnp - 底部相机高级校正的参数设置 …

平面电磁波(解麦克斯韦方程)

注意无源代表你立方程那个点xyzt处没有源,电场磁场也是这个点的。 j电流面密度,电流除以单位面积,ρ电荷体密度,电荷除以单位体积。 j方程组有16个未知数,每个矢量有三个xyz分量,即三个未知数,…

人口普查管理系统基于VUE+SpringBoot+Spring+SpringMVC+MyBatis开发设计与实现

目录 1. 系统概述 2. 系统架构设计 3. 技术实现细节 3.1 前端实现 3.2 后端实现 3.3 数据库设计 4. 安全性设计 5. 效果展示 ​编辑​编辑 6. 测试与部署 7. 示例代码 8. 结论与展望 一个基于 Vue Spring Boot Spring Spring MVC MyBatis 的人口普查管理…

加密与安全_TOTP 一次性密码生成算法

文章目录 PreTOTP是什么TOTP 算法工作原理TOTP 生成公式TOTP 与 HOTP 的对比Code生成TOTP验证 TOTP使用场景小结 TOTP 与 HOTP 的主要区别TOTP 与 HOTP应用场景比较TOTP 与 HOTP安全性分析 Pre 加密与安全_HTOP 一次性密码生成算法 https://github.com/samdjstevens/java-tot…

微信小程序服务端API安全鉴权统一调用封装

目录 一、序言二、前置准备1、获取小程序AppID和AppSecret2、下载对称加密密钥3、下载加签私钥4、下载验签证书 三、加解密封装1、相关基础类2、加解密工具类 四、HTTP调用封装五、微信服务端API网关调用封装1、基础类2、属性类和工具类3、枚举类4、网关核心调用抽象类5、网关核…

毕业论文设计javaweb+VUE高校教师信息管理系统

目录 一、系统概述 二、功能详解 1. 教师管理 2. 部门管理 3. 奖惩管理 4. 业绩管理 5. 培训管理 6. 报表查询 三、总结 四、示例代码 1 前端VUE 2 后端SpringBootjava 3 数据库表 随着教育信息化的发展,传统的手工管理方式已经不能满足现代学校对教师…

自动驾驶系列—自动驾驶发展史介绍

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

PyCharm开发工具的安装和基础使用

打开官网:https://www.jetbrains.com/ 切换中文语言, 点击开发者工具 → 选择PyCharm, 点击下载, 初学者下载免费使用的社区版(community)就够了, 点击下载, 点击下一步&am…

高性能架构—存储高性能

1 📊关系型数据库 存储技术飞速发展,关系型数据的ACID特性以及强大的SQL查询让其成为各种业务系统的关键和核心存储系统。 很多场景下的高性能设计最核心的就是关系型数据库的设计,很多数据库厂商再优化和提升单个数据库服务器的性能方面做了…

Java Web应用升级故障案例解析

在一次Java Web应用程序的优化升级过程中,从Tomcat 7.0.109版本升级至8.5.93版本后,尽管在预发布环境中验证无误,但在灰度环境中却发现了一个令人困惑的问题:新日志记录神秘“失踪”。本文深入探讨了这一问题的排查与解决过程&…

激光切割机适用材质有哪些

激光切割机是一种利用激光束对各种材料进行高精度、高速度切割的机器设备。其适用材质广泛,包括但不限于以下两大类: 一、金属材料 不锈钢:激光切割机较容易切割不锈钢薄板,使用高功率YAG激光切割系统,切割不锈钢板的…

大厂面试真题-说一下Mybatis的缓存

首先看一下原理图 Mybatis提供了两种缓存机制:一级缓存(L1 Cache)和二级缓存(L2 Cache),旨在提高数据库查询的性能,减少数据库的访问次数。注意查询的顺序是先二级缓存,再一级缓存。…

死锁的成因与解决方案

目录 死锁的概念与成因 栗子 死锁的情况 哲学家问题 如何避免死锁 必要条件 死锁的解决方案 总结 死锁的概念与成因 多个线程同时被阻塞,他们中的其中一个或者全部都在等待某个资源的释放,导致线程无限期被阻塞,程序无法停止 栗子 我和美女a出去吃饺子,吃饺子要醋和酱油…

高中教辅汇总【35GB】

文章目录 一、资源概览二、资源亮点三、获取方式 一、资源概览 这份教辅资源汇总,精心搜集了高中各学科的海量教辅资料,总容量高达35GB,覆盖了语文、数学、英语、物理、化学、生物、历史、地理、政治等所有必修及选修科目。从基础知识点到难…

ros2 自定义工作空间添加source

新建一个工作空间:ros2 create pkg~~~~~~~~~~~~ colcon build之后 ,在install文件夹里面有一个 setup,bash文件 将这个文件添加到 bashrc gedit .bashrc 这样 在一个新终端中可以直接运行ros2 run package name (包名) 可执行…

针对考研的C语言学习(2019链表大题)

题目解析: 【考】双指针算法,逆置法,归并法。 解析:因为题目要求空间复杂度为O(1),即不能再开辟一条链表,因此我们只能用变量来整体挪动原链表。 第一步先找出中间节点 typedef NODE* Node; Node find_m…