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表达式 的相关文章

  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 在 String.Format 中插入格式化字符?

    我用谷歌搜索了这个 但 VB Net 2008 似乎不允许在 String Format 中插入格式化字符 例如 t r n BAD MessageBox Show String Format 0 tab 1 Foo Bar BAD Mes
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • 计算损失函数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