CPP八股文-模板类.内存管理,指针

为什么模板类的定义需要放在头文件中?

无论是类模板还是函数模板,都是一个蓝图,本身不是一个类或函数,编译器用模板产生指定的类或函数的特定类型版本。产生模板的特定类型实例的过程称为模板的实例化。所以一般将模板类放在头文件中,在编译时,基于使用的具体对象的类别,生成对应的对象。

多态和模板类的联系?

继承语言特性带来的多态性,是程序运行时体现出来的,称为运行时多态性。

泛型编程的多态性,是在编译阶段体现的,称为编译时多态性。

malloc和new的区别是什么?

mallocnew 是在 C 和 C++ 中分配内存的两种方式,但它们有一些关键的区别:

  • malloc (C/C++):

    • 用法: void* malloc(size_t size);
    • malloc 仅分配内存,不调用构造函数。如果分配的内存需要初始化,你需要手动完成。
    • malloc 返回一个 void* 指针,需要强制转换为目标类型。
    • 释放内存时,需要调用 free()
  • new (C++):

    • 用法: Type* ptr = new Type;Type* ptr = new Type[size]; (分配数组)
    • new 除了分配内存,还会调用对象的构造函数。
    • new 返回的指针已经是正确的类型,不需要强制转换。
    • 释放内存时,需要调用 deletedelete[],它会自动调用析构函数。

内存分配的类型

  • malloc: 在堆上分配原始内存块,不关心内存块内存储的内容。
  • new: 在堆上分配内存,并且会自动初始化对象。

初始化

  • malloc: 不初始化分配的内存,内存中的内容是未定义的。
  • new: 自动初始化内存,如果是基本数据类型,会被默认初始化为零(对于内置类型)或调用对象的默认构造函数(对于类类型)。

类型安全

  • malloc: 由于返回的是 void*,需要手动进行类型转换,这可能会引入错误。
  • new: 不需要类型转换,类型安全。

异常处理

  • malloc: 如果分配失败,会返回 NULL,需要手动检查。
  • new: 如果分配失败,会抛出 std::bad_alloc 异常。

兼容性

  • malloc: 是 C 语言标准库的一部分,可以在 C 和 C++ 中使用。
  • new: 是 C++ 的关键字,仅在 C++ 中使用。

** 总结**

  • 在 C 中,使用 malloc 是标准的内存分配方式。
  • 在 C++ 中,使用 new 更加常见,因为它不仅分配内存,还会自动初始化对象,且更安全。

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

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

相关文章

rv1126-rv1109-mkcramfs-mkfs.cramfs-打包文件系统

事情是这样的: 定制了文件系统打包功能;然后我是根据这个指令 fakeroot mkfs.cramfs rootfs_glibc_rv1126/ rootfs.img mkfs.cramfs rootfs_glibc_rv1126/ rootfs.img 起因就是这个fakeroot; 不加的话打出来的rootfs.img是没有用户权限的 然后我根据fakeroot mkfs.cramfs ro…

vue仓库的使用

Vue仓库通常指的是使用Vue CLI创建的项目仓库,它包含了项目的所有源代码、配置文件以及依赖项。以下是如何使用Vue仓库的一些基本步骤和最佳实践: 创建Vue项目 首先,你需要安装Vue CLI,然后使用它来创建一个新的Vue项目。 npm i…

AcWing算法基础课-785快速排序-Java题解

大家好,我是何未来,本篇文章给大家讲解《AcWing算法基础课》785 题——快速排序。这篇文章介绍了使用快速排序算法对整数数列进行排序的方法,包括选择基准元素、分区操作和递归排序子数组。通过详细的步骤和示例,解释了快速排序的…

MySQL之数据库基础

目录 一、数据库 1、基本概念 2、常见的数据库 3、MySQL数据库 连接MySQL服务器 数据逻辑存储 二、数据库和表的本质 三、SQL语句 四、服务器,数据库,表的关系 五、存储引擎 查看存储引擎 一、数据库 1、基本概念 一般来说,数据库…

es映射配置(_mapping)

文章目录 1、创建映射字段2、查看映射关系 1、创建映射字段 PUT /索引库名/_mapping {"properties": {"字段名": {"type": "类型","index": true,"store": true,"analyzer": &q…

Vue转React踩坑记录——useEffect组件卸载时使用useState定义的值返回undefined

bug背景:vue转react踩坑。在vue数据是响应式的,卸载时不会出现数据已经赋值但是卸载是undefined情况,除非手动更改为undefined。而在react流行的hooks写法,你要一直操作数据,react提供的useEffect方法的return 里其实就…

视频结构化从入门到精通——视频结构化主要技术介绍

视频结构化主要技术 1 视频接入 “视频接入”是视频结构化管道的起点(SRC Point)视频接入是视频结构化处理的第一步,它涉及将视频数据从各种采集源获取到系统中进行进一步处理。视频接入的质量和稳定性对后续的数据处理、分析和应用至关重要…

多参数遥测终端科技守护水电站生态流量下泄

随着我国水电事业的蓬勃发展,水电站在推动地方经济快速增长、缓解能源压力方面发挥了不可替代的作用。然而带来的生态环境问题日益凸显,因水电站下泄流量不足造成部分河段减水、脱水甚至干涸,影响了河流的正常生态功能和居民的生产、生活。因…

Android12 添加设置控制导航栏显示和状态栏下拉

添加key值 位置: frameworks/base/core/java/android/provider/Settings.java /*** Control navigation bar enabled*/ReadableSuppressLint("NoSettingsProvider")public static final String NAVIGATIONBAR_ENABLED "navigationbar_enabled"…

【硬件操作入门】2--GPIO与门电路、二极管三极管、LED电路与操作

【硬件操作入门】2–GPIO与门电路(二极管&三极管)、LED电路与操作 文章目录 【硬件操作入门】2--GPIO与门电路(二极管&三极管)、LED电路与操作一、GPIO与门电路1.1、GPIO的应用1.2、GPIO引脚操作1.2.1 设置引脚为GPIO功能…

【计算机组成原理】3.2.4 双端口RAM和多模块存储器

3.2.4 双端口RAM和多模块存储器 本视频涉及两种内存优化技术,分别是“双端口RAM”和“多模块存储器”。其中,“双端口RAM”已从408大纲删除,但由于部分自命题院校依然会考这个概念,视频中仍然保留了这部分内容。 408考生简要了解…

Flutter Riverpod状态管理之AutoDisposeNotifierProvider

Flutter Riverpod状态管理之AutoDisposeNotifierProvider Flutter的Riverpod状态管理,目前来看是官方出的最好用的状态管理库了,今天我们主要看AutoDisposeNotifierProvider的使用,AutoDisposeNotifierProvider具有如下的优势: 1…

day39(8/29)——harbor私有仓库管理

一、harbor私有仓库管理 是python的包管理工具,和yum对redhat的关系是一样的 yum -y install epel-release yum -y install python2-pip pip install --upgrade pip pip list pip 8x pip install --upgrade pip pip install --upgrade pip20.3 -i https://mirror…

RFID光触发标签在文件柜管理中的创新应用

在当今信息化时代,文件管理对于企业和机构的重要性不言而喻。传统的文件柜管理方式存在诸多问题,如查找文件困难、管理效率低下、安全性难以保障等。而 RFID 光触发标签技术的出现,为文件柜管理带来了全新的解决方案。 一、传统文件柜管理的…

高效学习的方式

一、如何确定一个知识点是否值得投入学习? 1、目标对齐:考虑这个知识点是否与你的个人目标、职业发展或兴趣爱好相符。 2、需求分析:分析当前市场或学术界对这个知识点的需求,是否具有普遍性和紧迫性。 3、资源可用性&#xff…

Spring扩展点系列-@PostConstruct

简介 spring的Bean在创建的时候会进行初始化,而初始化过程会解析出PostConstruct注解的方法,并反射调用该方法。 PostConstruct 的使用和特点 只有一个非静态方法能使用此注解;被注解的方法不得有任何参数;被注解的方法返回值必…

行为型设计模式-中介者(mediator)模式-python实现

设计模式汇总:查看 通俗示例 想象一下你正在参与一个团队项目,团队成员包括设计师、前端开发者、后端开发者、测试工程师等。每个团队成员都需要与其他成员沟通协作,比如设计师完成设计后需要通知前端开发者开始开发,前端开发者完…

实际开发中git在IDEA中的使用

相信搜索这个的同学代码都已经拉取到本地了,并且已经在idea中打开了。 1.一般我们从远程colone下来的代码默认是在主分支下的,也就是说我们从远程的主分支拉取的代码并且在本地创建了一个主分支。 2.一般主分支是不允许修改的,所以我们可以基…

Logistic分类算法原理及Python实践

一、Logistic分类算法原理 Logistic分类算法,也称为逻辑回归(Logistic Regression),是机器学习中的一种经典分类算法,主要用于解决二分类问题。其原理基于线性回归和逻辑函数(Sigmoid函数)的组…

SpringBoot2:配置绑定与自动配置功能源码解读

一、配置绑定 1、作用说明 我们在开发springboot项目时,会有个配置文件,application.properties文件。 我们知道,像什么访问端口、上传功能的相关配置,都会在这里进行配置。 而这些,都是springboot自带的或者第三方j…