c++基础:new函数

2023-09-14 16:26:23

new函数

new是用于动态分配内存的操作符。它用于在堆内存中创建一个新的对象或数据结构,并返回一个指向该内存的指针。这是C++中进行动态内存分配的主要方式之一,通常与delete操作符一起使用来释放先前分配的内存。

以下是使用new操作符的一些示例:

动态分配一个整数,并将其赋值给指针:
int *pInt = new int;
*pInt = 42;
动态分配一个对象并调用其构造函数:
class MyClass {
public:
    MyClass() {
        // 构造函数代码
    }
};

MyClass *pObj = new MyClass;
动态分配一个数组:
int *pArray = new int[5]; // 创建一个包含5个整数的数组
pArray[0] = 10;
pArray[1] = 20;
// ...

需要注意的是,使用new分配的内存需要手动释放,否则可能会导致内存泄漏。释放内存时,通常使用delete操作符:

delete pInt;    // 释放单个整数的内存
delete pObj;    // 释放对象的内存
delete[] pArray; // 释放数组的内存

请确保在不再需要分配的内存时及时释放它,以避免内存泄漏问题。在现代C++中,建议使用智能指针(如std::shared_ptr和std::unique_ptr)来管理内存,以减少手动内存管理的复杂性和错误。

new用法

在C++中,new是一个操作符,用于在堆上动态分配内存空间。它的基本语法为:

指针变量 = new 数据类型;

其中,指针变量是一个指向已分配内存空间的指针,数据类型是要分配的数据类型。

例如,如果想动态分配一个整型变量,可以使用以下语句:

int *p = new int;

这样就在堆上动态分配了一个int型变量,并将其地址赋给了指针变量p。

另外,new操作符还可以用于动态分配数组。例如,如果想动态分配一个大小为10的整型数组,可以使用以下语句:

int *p = new int[10];

这样就在堆上动态分配了一个大小为10的int型数组,并将其首元素的地址赋给了指针变量p。

使用完new分配的内存后,应该使用delete操作符来释放这些内存,避免内存泄漏。delete的使用方法为:

delete 指针变量;

例如,如果要释放前面所分配的整型变量内存,可以使用以下语句:

delete p;

如果要释放前面所分配的整型数组内存,可以使用以下语句:

delete [] p;

使用new来动态的分配内存的操作符:是分配的内存块,

new可以在运行时动态地申请内存来构造一个对象或一组对象,这些对象的生命周期由程序员控制。
当使用new时一定要使用下面的释放内存的delete,否则会内存泄漏。

new 数据类型;
new 数据类型[数组大小];

typeName * pointer_name = new typeName ;

释放掉new开辟的内存空间delete

delete 内存块的指针;
释放的是指针指向的内存,不是删除指针本身。

在C++中,使用new动态地分配内存空间,程序员需要手动释放这些内存空间以避免内存泄漏。可以使用delete表达式来释放由new运算符开辟的内存空间。

delete有两种形式,一种是释放单个对象的内存,另一种是释放一个对象数组的内存。具体用法如下:
例如:
1:释放单个对象的内存

int* ptr = new int;  //分配一个int类型的内存空间
*ptr = 10;  //给这个内存空间赋值
delete ptr;  //释放这个内存空间

2:释放一个对象数组的内存

// 分配内存
int* arr = new int[10];
// 使用内存
// ...
// 释放内存
delete[] arr;

当delete表达式执行时,它会先调用该空间中的析构函数,然后将空间返回给操作系统。如果指针不是通过new分配的,则不能使用delete来释放它,否则会导致未定义的行为。

更多推荐

Text-to-SQL小白入门(六)Awesome-Text2SQL项目介绍

项目介绍项目地址GitHub地址:GitHub-eosphoros-ai/Awesome-Text2SQL:CuratedtutorialsandresourcesforLargeLanguageModels,Text2SQL,andmore.项目首页欢迎大家围观参与、使用、贡献。项目理念这个项目主要收集了针对大型语言

vite和webpack的区别

vite和webpack的区别1、前言2、Webpack2.1Webpack简述2.2Webpack常用插件3、Vite3.1Vite简述3.2Vite插件推荐4、区别4.1开发模式不同4.2打包效率不同4.3插件生态不同4.4配置复杂度不同4.5热更新机制不同5、总结1、前言Webpack和Vite是现代前端开发中非

笔记1.5:计算机网络体系结构

从功能上描述计算机网络结构分层结构每层遵循某个网络协议完成本层功能1.基本概念实体:表示任何可发送或接收信息的硬件或软件进程。协议是控制两个对等实体进行通信的规则的集合,协议是水平的。任一层实体需要使用下层服务,遵循本层协议,实现本层功能,向上层提供服务,服务是垂直的。下一层协议的实现对上层的服务用户是透明的同系统的相

Mysql 数据库基础介绍

Mysql数据库基础介绍一、数据库介绍1.1、数据库的发展史1.1.1、文件管理系统的缺点1.1.2、数据库系统发展阶段1.3、DBMS数据库管理系统1.4、数据库管理系统的优点1.5、数据库管理系统的基本功能1.6、数据库系统的架构1.7、各种数据库管理系统1.7.1、层次数据库1.7.2、网状数据库1.7.3、RD

TCP/IP协议栈各层涉及到的协议

21/tcpFTP文件传输协议22/tcpSSH安全登录、文件传送(SCP)和端口重定向23/tcpTelnet远程连接80/tcpHTTP443/tcpHTTPS计算机各层网络协议五层:应用层:(典型设备:应用程序,如FTP,SMTP,HTTP)DHCP(DynamicHostConfigurationProtoco

动态规划问题

看一遍就理解:动态规划详解-什么样的问题可以考虑使用动态规划解决呢?如果一个问题,可以把所有可能的答案穷举出来,并且穷举出来后,发现存在重叠子问题,就可以考虑使用动态规划。比如一些求最值的场景,如最长递增子序列、最小编辑距离、背包问题、凑零钱问题等等,都是动态规划的经典应用场景。-动态规划的解题思路动态规划的核心思想就

面试:C++ 11 智能指针

查询内存泄露方法啥是内存泄露内存泄露在维基百科中的解释如下:在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。在C++中出现内存泄露的主要原因就是程

若依注解学习(一)@Log

@Log涉及到:Log,LogAspect,SecurityUtils,SysUser,SysOperLog,BusinessStatus,StringUtils,ServletUtilsAsyncManager,AsyncFactory,AddressUtils,IpUtils,RuoYiConfig,HttpUti

3D模型转换工具HOOPS Exchange如何实现OBJ格式轻量化?

什么是OBJ模型轻量化?OBJ格式是一种常用的三维模型文件格式,通常包含模型的顶点、法线、纹理坐标等信息,但有时候这些信息可能会使模型文件变得较大,不利于网络传输、加载和运行。OBJ(Object)模型轻量化是指对OBJ格式的三维模型数据进行优化和压缩,以减少模型文件的大小和内存占用,同时尽量保持模型的视觉质量和几何信

浙工大MBA常规批复试建议怎么准备?

    如果你第一志愿报考浙江工业大学MBA项目不想被无故的淘汰,小编建议你还是认真对待考后的复试环节。因为从2023年的招生录取可以看到,浙工大MBA项目的提前批面试对于最终录取几乎是没什么作用的,在与普通考生同层次竞争的局面下,复试谁发挥的好,分数高,谁就可以获得录取的资格。

接口自动化测试:pytest基础讲解

为什么要做接⼝测试?只靠前端测试很难确保很⾼的覆盖率。接⼝测试,可以模拟出各种类型的⼊参,包括⼀些在前端模拟不出来的⼊参,还能根据接⼝⽂档的定义,设计出相对完善的⼊参值,在接⼝层保证质量,剩余的绝⼤多数问题就是应⽤程序⾃⾝的交互和数据展⽰问题。接⼝测试相对于交互界⾯测试和功能测试来说,更容易实现⾃动化,执⾏起来⽐较稳定

热文推荐