C++学习之new 与 delete表达式

2023-11-08

new和delete表达式动态创建和释放单个对象

a)         基本知识介绍:定义变量时,必须指定其数据类型和名字。而动态创建对象时只需指定其数据类型而不必为该对象命名。取而代之的是,new表达式返回新创建对象的指针,我们通过指针来访问此对象:

int i;//命名的但未初始化的变量

int *pi = new int;//pi指向一个动态分配的未命名,未初始化的变量

b)         简单代码演示:

             a)         动态创建对象的初始化

                          int i(1024);//i=1024

                          int *pi = new int(1024);//pi指向的对象的值是1024

                          string s(10,’9’);//十个9的字符串

                          string *ps = new string(10,’9’);//*ps为十个9的字符串

             b)         动态创建对象的默认初始化

                         如果不提供显示的初始化,对于类类型的对象,用该类的默认构造函数进行初始化;而内置类型的对象则无初始化

                         string *ps = new string//初始化为一个空字符串

                          int *pi = new int //pi指向一个未初始化的整型

                          ()是值初始化的语法

                          int *pi = new int();//pi表示指向一个值为0的整数

              c)         撤销动态创建对象

                           动态创建的对象用完之后,必须显示地将该对象占用的内存返回给自由存储区。

                           delete pi;

                          上面的命令释放pi指向的int型对象所占用的内存空间。

                          注意:如果指针指向的不是new分配的内存地址,则在该指针上使用delete是不合法的。具体举例如下:

                          int i;

                          int *pi = &i;

                          string str = “yanlei”;

                          double *pd = new double(33);

                          delete str;//error:str不是一个动态对象

                          delete pi;//error:pi指向的是一个本地变量

                          delete pd;//ok

c)         小常识:C++中不允许定义长度为0的数组,释放动态数组空间的正确语法语句为:

若定义为:int *pia = new int[10]

则释放空间的语句为:delete[] pia;

理论上,回收数组时缺少方括号对,至少会导致运行时少释放了内存空间,从而产生内存泄露。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++学习之new 与 delete表达式 的相关文章

随机推荐

  • 计算损失函数C语言,EAST 算法超详细源码解析(四)、损失函数

    Date 2020 05 19 Author CW 前言 EAST 的损失函数由三部分构成 对应预测输出的三个map score map loc map 以及 angle map 即分类损失 位置 点到文本框边界上下左右的距离 损失以及角度
  • stm32—通用定时器实验设计

    stm32定时器编写 stm32定时器编写 1 打开项目 2 在timer h中完成定时器中断实现步骤 a 使能定时器函数 b 初始化定时器 备注 c 开启定时器中断 配置NVIC d 使能定时器 3 写入中断服务函数 中断函数完成后 开始
  • 使用react脚手架快速搭建项目以及项目文件的介绍(目录文件的功能及作用)

    前言 本篇文章教大家使用脚手架搭建react的项目 对于新建的react项目 项目目录里的文件都是干什么的 有什么作用呢 下面一起来看看 react脚手架 使用yarn在本地安装create react app npm i g yarn 全
  • Easylogging++之配置功能

    要完成Easylogging 日志的配置功能 可以通过三种方式实现 而且每一种方法都非常简单 使用配置文件 这种方法的好处就是只要修改配置文件即可实现日志格式的重新配置 而不需要修改源程序代码 缺点就是发布程序时必须打包配置文件一起发布 否
  • 常见架构模式 #CSDN博文精选# #IT技术# #软件模式# #架构模式#

    大家好 小C将继续与你们见面 带来精选的CSDN博文 又到周一啦 上周的系统化学习专栏已经结束 我们总共一起学习了20篇文章 这周将开启全新专栏 放假不停学 全栈工程师养成记 在这里 你将收获 将系统化学习理论运用于实践 系统学习IT技术
  • 计算机操作系统 (王道考研)笔记(一)

    重点知识点 1 并发 并行 2 电脑开机过程 3 程序 进程 4 进程 4 1 进程的组成与控制 进程的状态与转换 4 1 1 进程的组成 4 1 2 进程控制 4 1 3 进程的状态与转换 4 1 4 程序的切换 4 2 进程通信 4 2
  • 由计数排序衍生出来的桶排序

    计数排序说白了 就是拿一个列表来记录list里的数对应count的下标出现的次数 最后利用count的统计打印出来即可 下面来看看桶排序 针对较多的数据排序 将数据分为n个桶 列表遍历 冒泡排序逆用 确保每个桶里有序 直到最后将内个桶的数据
  • mysql查询时取多条记录中最大时间的记录

    在查询的过程中 有时库里单个用户的数据往往会存在很多条 当我们需要查询出用户的一条数据时 最大时间对应记录或最小时间对应记录 往往要写很复杂的子查询 而其实通过一个简单的方法就可以查询 就是使用concat函数 就可以非常简单的查询出相应的
  • 小技巧(8):Word中自定义目录,并设置自动目录的格式

    文章目录 一 对正文中的目录设置大纲级别 1 1 通过样式设置标题级别 1 2 通过段落设置标题级别 二 设定自定义目录格式 2 1 生成自定义目录 2 2 设置显示大纲级别 2 3 设置不同级别目录的显示格式 一 对正文中的目录设置大纲级
  • vsftpd的安装和使用

    目录 1 vsftpd的简介 2 2 特点 2 3 安装 2 4 创建虚拟用户 2 5 vsftpd服务器的配置 4 6 vsftpd配置文件说明 7 7 防火墙的配置 8 8 vsftpd的验证 9 9 vsftpd的常用命令 10 10
  • sql 递归查询_SQL如何求解递归问题?

    点击上方SQL数据库开发 关注获取SQL视频教程 SQL专栏SQL数据库基础知识汇总SQL数据库高级知识汇总 递归 递归是指程序调用自身的一种编程技巧 在SQL中也有递归查询 下面我们通过一个省市区的示例来讲解递归查询的用法 问题 有如下一
  • 【C语言刷题2】

    1 杨辉三角 思路 首先观察一下示例 会发现需要一个二维数组来帮助解题 根据题目描述 会发现每一行的元素个数等于行数 并且每行首尾元素都是1 中间的元素都是左上角和上方元素和 这样我们就可以建立一个选择语句if else 如果是每行第一个或
  • UE4 C++ Timeline

    UE4 C Timeline 我命名有点不规范注意点看 结束事件绑定 每次更改绑定 调用时间轴开始方法方法 1 先建C 类 用碰撞触发时间轴 代码 h Fill out your copyright notice in the Descri
  • Compareable接口的compareTo方法详解

    Compareable接口可以实现类中成员属性的排序方法 通过重写Compareable接口中的CompareTo方法实现自定义规则的排序 针对Compareable接口的排序方式 将通过对学生类和测试类进行一个代码演示 一般情况下 一般情
  • Java用集合实现斗地主洗牌发牌

    案列分析 准备4种花色牌与13种数值牌循环嵌套为52张牌 加两种特殊牌大王小王牌共54种 再进行洗牌发牌 文章目录 一 思路分析 二 准备牌 1 准备一个集合存放所有牌 2 准备两个数组分别存取扑克牌的4种花色和13种数值 3 进行嵌套组合
  • 调度器简介,以及Linux的调度策略

    进程是操作系统虚拟出来的概念 用来组织计算机中的任务 但随着进程被赋予越来越多的任务 进程好像有了真实的生命 它从诞生就随着CPU时间执行 直到最终消失 不过 进程的生命都得到了操作系统内核的关照 就好像疲于照顾几个孩子的母亲内核必须做出决
  • Linux找回密码

    Linux找回密码 1 开启的时候要尽快点击键盘上下键 选中上面一个 然后输入 e 2 然后点击键盘上下键 找到linux16开头这一行 在行的最后输入 init bin sh 3 接着 输入完成后 直接按快捷键 Ctrl x 进入单用户模
  • CSDN的chatGPT为什么会有很多问题无法回答?

    ChatGPT是一个被OpenAI训练的大型语言模型 它使用机器学习算法 可以根据上下文和用户的输入来回答问题 然而 由于我们的认知有限 有时ChatGPT无法正确理解用户的问题或句子 从而导致它无法给出准确的回答
  • 登录文档服务器,开启登录服务器

    开启登录服务器 内容精选 换一换 如果您已在购买存储库时绑定服务器 文件系统或磁盘 可以跳过此章节 云服务器备份存储库 SFS Turbo备份存储库和云硬盘备份存储库创建后 通过向存储库绑定服务器 文件系统或磁盘来进行备份 复制操作 当混合
  • C++学习之new 与 delete表达式

    new和delete表达式动态创建和释放单个对象 a 基本知识介绍 定义变量时 必须指定其数据类型和名字 而动态创建对象时只需指定其数据类型而不必为该对象命名 取而代之的是 new表达式返回新创建对象的指针 我们通过指针来访问此对象 int