new与delete动态分配和释放内存

2023-05-16

(一)new运算符

 

(1)new运算符使用的一般格式:

new 类型 [初值];

用new分配空间时不指定初值。如果由于内存不足等原因而无法正常分配空间,那么new会返回一个空指针NULL,用户可以更具该指针的值判断分配空间是否成功。

例如:
new int;//开辟一个存放整形的存储空间,返回一个指向该存储空间的地址(指针)。

new int (100);//开辟一个存放整形的空间,并指定该整数的初值为100。

new *c=new char [10];//开辟一个存放字符数组的空间,返回首地址。

float *p=new float (1.14159);

//开辟一个存放单精度数的空间,并指定该实数值为3.14159,将返回该空间的地址赋给指针变量p


(2)用new动态建立一个对象:

new Worker;

编译系统开辟了一段内存空间,并在此内存空间存放了一个Worker类对象。但此时用户还无法访问这个对象,因为这个对象既没有对象名,用户也不知道它的地址,这种对象称为无名对象。它确实存在,但没有名字。

用new运算符动态分配内存后,将返回一个指向新对象的指针值,即所分配的内存空间的起始地址。用户可以获得这个地址,并通过这个地址来访问这个对象。需要定义一个指向本类的对象的指针变量来存放该地址。

Worker *pt;//定义一个指向Worker类对象的指针pt

pt=new Worker;//在pt中存放新对象的起始地址

(3)C++还允许在执行new时,对新建对象进行初始化。例如:

Student *pt=new Student (1,"zhangsan',4000);

在执行new运算符时,如果内存量不足,无法开辟所需的内存空间,目前大多数C++编译系统都会使用new返回一个0指针。只要检测返回值是否为0,就可以判断分配内存是否成功。

(二)delete运算符

delete运算符的一般形式

delete [ ] 指针变量;

例如要撤销上面用new开辟的存放单精度数的空间,方法如下:

delete p;

要撤销上面用new开辟的存放字符数组的空间,方法如下:

delete [ ] c;

要撤销上面用new开辟的对象空间,方法如下:

delete pt;


new与delete动态分配和释放内存j举例

#include<iostream>
using namespace std;
//1.new的基本用法
int *func()
{
	//在堆区创建建整形数据
	//new 返回的是 该数据类型的指针
	int *p=new int (10);
	return p; 
 } 
 void test01()
 {
 	int *p=func();
 	cout<<*p<<endl;
	 //堆区的数据 由程序员管理开辟 程序员管理释放
	 //如果想释放堆区的数据,利用关键字delete
	 delete p;

	 //cout<<*p<<endl; 	 //注意:会报错,因为内存已经被释放,再次访问就是非法操作,会报错 
 }
 void test02()
 {
 	//在堆区创建10个整形数据的数组 
 	int *arr=new int[10];//10代表数组有10个元素 
	 for(int i=0;i<10;i++)
	 {
	 	arr[i]=i+100;//给10个数赋值100~109 
	  } 
	  for(int i=0;i<10;i++)
	 {
	 	cout<<arr[i]<<endl; 
	  } 
	  //释放堆区数组
	  delete []arr; 
  } 
int main()
{
	test01();
	test02();
	return 0;
 } 

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

new与delete动态分配和释放内存 的相关文章

随机推荐

  • Gitea——私有git服务器搭建详细教程

    本文将从源代码和docker安装两种方式带大家从0 xff5e 1通过Gitea搭建一个私有git服务器 Gitea 私有git服务器搭建教程 什么是Gitea一 源代码安装方式1 前置环境要求2 下载gitea3 构建运行 二 Docke
  • Golang的交叉编译问题

    参考 xff1a Golang交叉编译各个平台的二进制文件 Go语言中文网 Golang中文社区 studygolang com 也谈Go的可移植性 Tony Bai 今天准备将一个在Mac上开发的Golang项目部署到云服务器上进行部署上
  • Docsify个人网站搭建详细教程

    目录 一 什么是 docsify二 安装 docsify三 多页文档设置四 定制化配置4 1 侧边栏4 2 导航栏4 3 封面4 4 主题 五 部署5 1 部署到Gitee5 2 部署到云服务器 一 什么是 docsify docsify是
  • Hexo集成Algolia实现搜索功能

    2年前搭建的hexo博客好久没有维护了 xff0c 一看 hexo 以及先前使用 butterfly 主题已经更新好几个版本了 xff0c 看介绍在速度性能上有了很大的提高 xff0c 于是打算给 hexo 升个级 xff0c 整理整理翻翻
  • 知识图谱入门——(1)Neo4j基础操作

    1 增 增加一个节点 create n person name 39 我 39 xff0c age 31 带有属性关系 create p Person name 34 我 34 age 34 31 34 包工程 金额 10000 gt n
  • Hexo集成Valine实现评论留言

    2年前搭建的hexo博客好久没有维护了 xff0c 一看 hexo 以及先前使用 butterfly 主题已经更新好几个版本了 xff0c 看介绍在速度性能上有了很大的提高 xff0c 于是打算给 hexo 升个级 xff0c 整理整理翻翻
  • 谷粒商城学习笔记——第一期:项目简介

    一 项目简介 1 项目背景 市面上有5种常见的电商模式 B2B B2C C2B C2C O2O B2B 模式 Business to Business xff0c 是指商家和商家建立的商业关系 如阿里巴巴B2C 模式 Business to
  • 【快速上手mac必备】常用优质mac软件推荐(音视频、办公、软件开发、辅助工具、系统管理、云存储)

    本文章的主要内容是我作为一名大四学生 准程序员 up主这三种身份来给大家推荐一下 mac 上好用的软件以及工具 本人也是从去年9月份开始从windows阵营转移到了mac阵营 xff0c 刚开始使用的时候 xff0c 也曾主观认为mac o
  • 网站徽章shields制作教程

    平时在逛 Gitee Github 等各大代码仓库时 xff0c 往往能看到以下这种徽章式的网页链接 xff0c 美观好看又方便 xff0c 那么这个徽章是如何制作出来的呢 xff1f 本文就带大家制作属于自己的徽章式链接 制作工具 xff
  • Gitee图床无法访问新增防盗链,最新详细解决方案

    目录 一 寻找Gitee图床挂掉的原因二 迁移到腾讯云cos1 创建存储桶2 设置密钥3 配置PicGO4 验证配置是否成功5 迁移Gitee图片6 批量更改url前缀 三 最后想说 一 寻找Gitee图床挂掉的原因 昨天晚上准备整理一下以
  • 假设发生了404错误,都统一跳转到error.html页面,如何在web.xml中配置?

    假设发生了404错误 xff0c 都统一跳转到error html页面 xff0c 如何在web xml中配置 xff1f lt error page gt lt error code gt 404 lt error code gt lt
  • 人工智能研究主要有哪三大学派,其特点是什么?

    人工智能研究主要有哪三大学派 xff0c 其特点是什么 xff1f xff08 1 xff09 符号主义 xff1a 又称为功能模拟学派 xff0c 主要观点认为智能活动的基础是物理符号系统 xff0c 思维过程是符号模式的处理过程 其特点
  • python 绘制graph图——networkx

    span class token keyword import span networkx span class token keyword as span nx span class token keyword import span m
  • MacBookPro M1&M1Pro安装PyQt5

    前言 最近想开发一个GUI图形界面的应用 xff0c 在Mac上面使用Pycharm安装PyQt5怎样都无法安装 xff0c 联想到了可能是当前电脑系统架构导致PyQt5包无法下载或适配 xff0c 所以借鉴了网上大佬的一些方法 xff0c
  • 在普通Maven项目中引入Mybatis

    在普通Maven项目中引入Mybatis 1 引入依赖包 打开项目根目录下的pom xml对dependencies进行配置即引入mybatis和mysql connector java两个依赖包 span class token tag
  • 解决方案|ValueError:The following settings are not supported :{‘username‘: ‘neo4j“}

    此处贴出py2neo官方链接 xff08 2022 06 14 供各位同学参考 https py2neo org 2021 1 问题所在 xff1a 我使用的代码是老版本的 xff0c 而我使用的Neo4j是最新版的 解决方案 xff1a
  • 关于SpringMVC的XML配置步骤

    1 配置前端控制 lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt lt web app xmlns 61 34 http xmlns jcp org xml ns javaee
  • python仿真——猎狗追兔子

    猎狗追兔子问题 有一只猎狗在原点位置发现了一只兔子在正东方距离它20米的地方 xff0c 此时兔子开始以3米 秒的速度向正北方全速跑去 xff0c 假设猎狗在追赶兔子的时候始终朝着兔子的方向以速度4米 秒全速奔跑 xff0c 用计算机仿真法
  • spring框架 快速入门

    Spring是什么 Spring是一款开源的免费框架 xff0c 是分层的javaSE EE 应用full stack轻量级开源框架 xff0c 以IIoc Inverse Of Control 反转控制 和Aop xff08 Aspect
  • new与delete动态分配和释放内存

    xff08 一 xff09 new运算符 xff08 1 xff09 new运算符使用的一般格式 xff1a new 类型 初值 xff1b 用new分配空间 时不指定初值 如果由于内存不足 等原因而无法正常分配空间 xff0c 那么new