C++内存管理和简单模板

文章目录

目录

文章目录

前言

一.内存管理

1.new   delete操作符

对内置类型

对自定义类型

2.operator new与operator delete函数

3.定位new

二.模板

1.函数模板

2.类模板



前言

        C++是一种通用编程语言,支持面向对象、过程性和泛型编程。在C++中,内存管理和模板是两个重要的概念,它们分别涉及到程序的运行时性能和代码的通用性。


一.内存管理

        C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力,而且使用起来比较麻烦,因此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。

1.new   delete操作符

对内置类型

比如

// 动态申请一个int类型的空间
int* ptr4 = new int;// 动态申请一个int类型的空间并初始化为10
int* ptr5 = new int(10);// 动态申请10个int类型的空间
int* ptr6 = new int[3];delete ptr4;
delete ptr5;
delete[] ptr6;

注意:申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用 new[]和delete[],两者不能混用

对自定义类型

C++的很多东西都是针对自定义类型实现的

比如这个

class A
{
public:A(){cout<<"A()"<<endl;}~A(){cout<<"~A()"<<endl;}int a;
};
int main()
{A* a=new A[3];delete[] a;
}

在对自定义类型new时会自动调用类的构造函数,而delete会调用类的析构函数

2.operator new与operator delete函数

        new和delete是用户进行动态内存申请和释放的操作符,operator new 和operator delete是 系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过 operator delete全局函数来释放空间。

这两个函数不会调用类构造函数和析构函数,比如

class A
{
public:A(){cout<<"A()"<<endl;}~A(){cout<<"~A()"<<endl;}int a;
};
int main()
{A* a=(A*)operator new(sizeof(A));cout<<endl;operator delete[](a);
}

3.定位new

        定位new表达式是在已分配的原始内存空间中调用构造函数初始化一个对象

比如

这样就显式调用了A的构造函数

然而构造函数不能直接显示调用,而析构函数却可以显式调用

定位new的用途不再这里,后面再细讲

二.模板

1.函数模板

        函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本。 函数模板格式 template 返回值类型 函数名(参数列表){}

注意:typename是用来定义模板参数关键字,也可以使用class(切记:不能使用struct代替class)

比如这个交换函数

template<class T>
void swap(T&a,T&b)
{T c=a;a=b;b=c;
}
int main()
{int a=1,b=2;char c='a',d='b';swap<int>(a,b);swap<char>(c,d);cout<<a <<" "<<b<<endl;cout<<c<<" "<<d<<endl;
}

2.类模板

定义格式


template<class T1, class T2, ..., class Tn>
class 类模板名
{// 类内成员定义
}; 

        类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<> 中即可,类模板名字不是真正的类,而实例化的结果才是真正的类,比如这个类

template<class TreeType>
class TreeNode
{
public:TreeNode(TreeType x);int Height();~TreeNode();void InOrder();private:TreeType _val;int _height;TreeNode<TreeType>* _left;TreeNode<TreeType>* _right;
};

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

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

相关文章

编译和链接(1)

目录 1. 程序的翻译环境和执行环境 2. 详解编译链接 2.1 翻译环境 2.2 编译本身也分为几个阶段&#xff1a; 2.3 运行环境 3. 预处理详解 3.1 预定义符号 3.2 #define 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 3.2.3 #define 替换规则 3.2.4 #和## 1. 程序的翻译环境和执…

分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】

分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】 目录 分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】分类效果基本描述模型描述程序设计参考资料 分…

计算n的平方根m 进而将m向下取整 math.isqrt()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算n的平方根m 进而将m向下取整 math.isqrt() 选择题 请问执行math.isqrt(10)的运行结果是&#xff1a; import math print("【执行】math.sqrt(10)") print (math.sqrt(10)) pr…

Linux中Docker数据管理的数据卷及挂载

目录 一、数据管理 1. 讲述 2. 应用场景 二、数据卷的应用 1. 命令 2. tomcat镜像 3. 挂载数据卷 4. 项目部署在数据卷 三、目录挂载 四、完善Tomcat配置 每篇一获 一、数据管理 1. 讲述 Docker 的数据管理主要涉及到两个方面&#xff1a;数据卷&#xff08;Volumes&#xff09…

【基于Java Swing设计药品信息管理系统】——界面美观、功能全,可直接上手使用

一、基本功能描述 药品信息管理系统的选题背景主要是因为现今医疗行业中,药品管理和库存管理都是非常重要而复杂的工作。传统的手动记录、查询等方式耗费人力物力较多,并且容易出错。因此,采用计算机技术来帮助药品信息管理和库存管理已成为必要的趋势。 该药品信息管理系统…

Linux中PyTorch的安装教程

在安装PyTorch之前&#xff0c;我们需要确保已经安装了Python和pip。可以使用以下命令检查是否已经安装&#xff1a; python --version pip --version如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo apt-get update sudo apt-get install python3 sudo apt-…

利用网络威胁情报增强网络安全态势

在当今的网络威胁形势下&#xff0c;明智且主动的防御策略至关重要。网络威胁情报是组织的重要工具&#xff0c;可帮助他们预测和应对网络风险。网络威胁情报不仅提供原始数据&#xff0c;还提供&#xff1a; 深入了解网络攻击者的动机了解他们的潜在目标了解他们的战术 通过…

2024阿里云服务器ECS介绍_全方位解析_CPU性能详解

阿里云服务器ECS英文全程Elastic Compute Service&#xff0c;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云百科aliyunbai…

【Unity】Attribute meta-data#com.google.android.play.billingclient.version 多版本库冲突

文章目录 一、背景二、问题描述三、解决方案 一、背景 1、Unity 2021.3.9f1 2、Max由6.0.1至最新版本6.1.0 二、问题描述 错误信息 Attribute meta-data#com.google.android.play.billingclient.versionvalue value(6.1.0) from [com.android.billingclient:billing:6.1.0] An…

【LeetCode】203. 移除链表元素(简单)——代码随想录算法训练营Day03

题目链接&#xff1a;203. 移除链表元素 题目描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff…

Android 12.0 系统开启和关闭黑白模式主题功能

1.概述 在12.0的rom系统开发定制化中,在系统SystemUI的下拉状态栏中,产品开发功能需求要求添加黑白模式功能开关的功能,就是打开黑白模式,系统颜色就会变成黑白颜色, 关闭黑白模式开关系统就会变成彩色模式,所以就需要了解下系统是怎么设置黑白模式和彩色模式的,然后添…

什么是国密算法

国密算法是指由中国国家密码管理局发布的密码算法标准&#xff0c;旨在保障国家信息安全。目前&#xff0c;国家密码管理局已发布了一系列国产商用密码标准算法&#xff0c;包括SM1&#xff08;SCB2&#xff09;、SM2、SM3、SM4、SM7、SM9以及祖冲之密码算法&#xff08;ZUC)等…

SGL-110型定时限过流继电器 额定电流5A 额定电压220V 交直流通用 板前接线

系列型号 LGY-110零序过电压继电器&#xff1b; LGL-110零序过电压继电器&#xff1b; LGL-110/AC零序过电压继电器&#xff1b; LGL-110零序过电流继电器 板前接线 &#xff11; 应用 LGL-110 型零序过电流继电器用作线路和电力设备的零序过电流保护。 LGY-110 型零序过…

SQL Server的彻底卸载的方式

这篇文章主要介绍了SQL Server的彻底卸载的方式&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。如有错误或未考虑完全的地方&#xff0c;望不吝赐教 SQL Server的彻底卸载与再次安装 可能大家已经有深刻体会&#xff0c;SQL Server的卸载十分繁琐。最让人头…

【AWS】使用亚马逊云服务器创建EC2实例

目录 前言为什么选择 Amazon EC2 云服务器搭建 Amazon EC2 云服务器注册亚马逊账号登录控制台服务器配置免费套餐预览使用 Amazon EC2 云服务器打开服务器管理界面设置服务器区域填写实例名称选择服务器系统镜像选择实例类型创建密钥对网络设置配置存储启动实例查看实例 总结 前…

第22集《佛法修学概要》

请大家打开讲义第六十一页。 我们这一科讲到归敬三宝。前面讲到&#xff0c;我们在心中能够受持“常住”两个字&#xff0c;就能够远离三恶道。“常住”是针对生灭来说的&#xff0c;我们的心是没有常住的。凡夫的心深受感受的刺激&#xff0c;一接触外境就带动感受&#xff0…

Eclipse插件UCdetector清理无用JAVA代码

下载插件 UCDetector - Browse /ucdetector at SourceForge.net 目前最新版本是2017年的2.0.0 保存 Eclipse/dropins 重启 操作 在项目上右键

ESU毅速丨复杂结构模具可尝试3D打印随形水路

冷却水路对模具的生产效率影响巨大&#xff0c;一些结构复杂、骨位深的模具常规水路加工困难且冷却效果不理想&#xff0c;这时可尝试3D打印来制造水路。3D打印技术可以制造出具有复杂内部结构和任意几何形状的部件&#xff0c;特别适合结构复杂、骨位深、薄壁等特征的模具水路…

回归预测 | Matlab基于SO-GRU蛇群算法优化门控循环单元的数据多输入单输出回归预测

回归预测 | Matlab基于SO-GRU蛇群算法优化门控循环单元的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SO-GRU蛇群算法优化门控循环单元的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SO-GRU蛇群算法优化门控循环单元的数…

jdk、tomcat、mysql的安装windows项目部署

文章目录 1、安装jdk2、tomcat安装3、MySQL安装3、外部访问数据库 1、安装jdk 1.双击运行jdk-8u144进行一个安装 2.一直点击下一步&#xff0c;到修改路径那个地方把他的存放路径改到D盘 3.找到我们刚刚修改的那个路径点进bin目录然后复制该路径进行一个环境变量配置4.找到我的…