c++926

news2024/9/28 22:16:08

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.coloradmin.cn/o/2174928.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

天龙八部怀旧单机微改人面桃花+安装教程+GM工具+虚拟机一键端

今天给大家带来一款单机游戏的架设:天龙八部怀旧单机微改人面桃花。 另外:本人承接各种游戏架设(单机联网) 本人为了学习和研究软件内含的设计思想和原理,带了架设教程仅供娱乐。 教程是本人亲自搭建成功的&#xf…

图说数集相等定义表明“R各元x的对应x+0.0001的全体=R“是几百年重大错误

黄小宁 设集A{x}表A各元均由x代表,{x}中变量x的变域是A。其余类推。因各数x可是数轴上点的坐标故x∈R变为实数yx1的几何意义可是:一维空间“管道”g内R轴上的质点x∈R(x是点的坐标)沿“管道”g平移变为点y…

红队信息搜集扫描使用

红队信息搜集扫描使用 红队行动中需要工具化一些常用攻击,所以学习一下 nmap 等的常规使用,提供灵感 nmap 帮助 nmap --help主机扫描 Scan and no port scan(扫描但不端口扫描)。-sn 在老版本中是 -sP,P的含义是 P…

视频美颜SDK与直播美颜工具API是什么?计算机视觉技术详解

今天,小编将深入探讨视频美颜SDK与直播美颜工具API的概念及其背后的计算机视觉技术。 一、视频美颜SDK的概念 视频美颜SDK是一套用于开发实时美颜效果的工具集,开发者可以利用它在视频流中实现面部特征的优化。这些SDK通常提供了一系列功能&#xff0c…

.NET 红队武器库和资源集合 (第38期)

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

计算机网络自顶向下(1)---网络基础

目录 1.网络的分类 2.网络协议 3.网络分层结构 1.OSI七层模型 2.TCP/IP四层模型 3.网络与OS的关系 4.网络传输基本流程 1.协议报头 5.网络中的地址管理 1.IP地址 2.端口号 6.传输层协议 1.TCP协议 2.UDP协议 3.网络字节序 7.socket 1.网络的分类 局域网&…

excel-VBA知识点记录

1、计算机硬件的组成部分 内存,一旦断电,存储在里面的数据就消失了,而硬盘是永久存储数据的,所以刚开始我们在文件里面编辑没有按保存的时候,数据是在内存里面的,一旦断电数据就没了,但我们点了…

大语言模型知识点分享

1 目前主流的开源模型体系有哪些? Prefix Decoder 系列模型 核心点: 输入采用双向注意力机制,输出为单向注意力。双向注意力意味着输入的每个部分都可以关注到输入的所有其他部分,这在理解上下文时具有很强的优势。 代表模型&a…

六级翻译 高分笔记

第一节 句子的拆分与重组 核心原则:拆主干,补修饰 一、句子的拆分与重组 1.青藏铁路是世界最高最长的高原铁路。(“的”字前面所有去掉,就是句子主干) The Qinghai-Tibet Railway is the highest and longest plate…

css 数字比汉字要靠上

这个问题通常是由于数字字体的下排的问题造成的,也就是数字的底部边缘位置比汉字的顶部边缘位置更靠下。为了解决这个问题,可以尝试以下几种方法: 使用CSS的vertical-align属性来调整对齐方式。例如,可以将数字的对齐方式设置为to…

数组的练习

1.使用函数的递归方法&#xff0c;输出给定字符串的逆序&#xff0c;如"abcdefg"&#xff0c;输出为“gfedcba”. 方法一&#xff1a;首先不采用递归的方法&#xff0c;如何完成上述要求 #include<stdio.h> #include<string.h> int main() {char arr[]…

3.数据结构与算法-基本概念和术语

数据、数据元素、数据项和数据对象 数据 数据元素 学生表-记录 数-节点 图&#xff1a;顶点 数据项 数据对象 数据对象与数据元素的关系 数据结构 数据结构的三个部分 逻辑结构的种类 存储结构分类 顺序存储结构 链式存储结构 索引存储结构 散列存储结构 数据类型和抽象数据类…

Linux中的文件缓冲区

目录 使用 dup2 系统调用 为命令行解释器添加重定向功能 理解缓冲区问题 缓存区的刷新策略 FILE的本质 尝试封装C语言的FILE 小共识&#xff1a; cd->当前路径->当前进程的工作路径->工作路径可以被修改->每个进程都有当前路径->故cd改的是子进程的路径-…

算力共享平台的控制流程,业务流程

目录 控制流程 业务流程 在提供的计算机网络系统结构示意图和描述中,我们可以区分出控制流程和业务流程的组成部分。 控制流程 控制流程主要涉及系统内部的管理、调度和监控操作,以确保系统能够按照预定的规则和策略运行。在这个例子中,控制流程可能包括但不限于以下部分…

K8S真正删除pod

假设k8s的某个命名空间如&#xff08;default&#xff09;有一个运行nginx 的pod&#xff0c;而这个pod是以kubectl run pod命令运行的 1.错误示范&#xff1a; kubectl delete pod nginx-2756690723-hllbp 结果显示这个pod 是删除了&#xff0c;但k8s很快自动创建新的pod,但是…

【C++算法】5.双指针_乘最多水的容器

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解&#xff1a; 题目链接&#xff1a; 11.盛最多水的容器 题目描述&#xff1a; 解法 7x749 解法一&#xff1a;暴力枚举 输入&#xff1a;[1&#xff0c;8&#xff0c;6&#xff0c;2&#xf…

大厂AI必备数据结构与算法——链表(三)详细文档

冲冲冲&#xff01;开干 神马&#xff01;神马&#xff01;神马&#xff0c;一向让我们学习起来抓耳挠腮的数据结构课程竟然也有教程&#xff1f;还那么详细&#xff1f;&#xff1f;真的假的&#xff1f; 那么好&#xff0c;胡广告诉你是假的&#xff0c;哈哈哈哈哈哈哈哈哈…

付费计量系统通用处理类(下)

普通处理类如下定义&#xff1a; 10.11 Class 11: Customer _Delivery process 用户交付过程 The processes associated with transferring delivered electrical energy to the customer’s load circuit. 是关于将传输的电能传递到用户的负荷电路。 Examples…

告别熬夜,追求高效写作:芝士AI写作,效率与质量的双重提升

好的工具&#xff0c;真得能够让我们的学习事半功倍&#xff0c;有了芝士AI&#xff08;paperzz&#xff09;工具的加持&#xff0c;妈妈再也不用担心我熬夜写论文了 。 芝士AI官网&#xff1a;https://www.paperzz.cn/ 不愧是由985硕博团队开发的AI大模型功软件&#xff0c;…

LeetCode 427. 建立四叉树

LeetCode 427. 建立四叉树 &#xff08;题干略&#xff09; """ # Definition for a QuadTree node. class Node:def __init__(self, val, isLeaf, topLeft, topRight, bottomLeft, bottomRight):self.val valself.isLeaf isLeafself.topLeft topLeftself.t…