iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中new与deleted关键字如何使用
  • 535
分享到

C++中new与deleted关键字如何使用

2023-06-30 15:06:09 535人浏览 安东尼
摘要

今天小编给大家分享一下c++中new与deleted关键字如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。可执行程序的

今天小编给大家分享一下c++中new与deleted关键字如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

可执行程序的虚拟地址空间

C++中new与deleted关键字如何使用

  1. 内核:存放操作系统

  2. 栈区:函数的形参,非静态的局部变量,函数现场 保护数据等等,栈是向下增长的。

  3. 共享库的内存映射区域:用于装载一个共享的动态内存库。用户可使用系统接口创建共享内存,做进程间通信。

  4. 堆区:用于程序运行时动态内存分配,堆是可以上增长的。

  5. 数据:存储全局数据和静态数据,分为.bss和.data 。

  6. 代码:可执行的程序(机器指令)和常量数据。

1.new的运算符用法(关键字)

int* p= new int(10);

这里的new的用法是当作运算符的用法,该用法一共有四个步骤:

  1. 计算类型

  2. 申请一个空间(因为new的底层是malloc)

  3. 将所取得的空间初始化

  4. 将申请到的地址返回

2.new的函数用法

new当作函数用法使用的是时候,类似malloc,都是申请一个空间,区别在于,返回值不同;当空间不足时malloc会返回一个“nullptr”,operator new会返回一个throw_bad的异常。

C++中new与deleted关键字如何使用

当我们加入一个nothrow后:

C++中new与deleted关键字如何使用

这样申请错误后,我们返回的是空指针。

对于malloc我们不可以进行初始化,new也不可以初始化。

所以当new作为函数时就相当于malloc。

3.定位new

定位new用法与构造new十分相似,是在已经确定的空间当中,构造一个对象,并将该对象放置到声明的空间当中。

int main(){int n = 10;int* ipa = (int*)ma11oc(sizeof(int));int* ipb = (int*) : :operator new(sizeof(int) * n);new(ipa) int(20);new(ipb) int[]{ 1,2,3,4,5,6,7,8,9 };free(ipa);: :operator delete(ipb);return 0;}

不需要开辟相应的空间 合法空间即可 给出某个地址 即可根据要求进行相应操作。

4.new创建对象

new创建对象特点:

  1. new创建对象需要指针接收,一处初始化,多处使用。

  2. new创建对象使用完需delete销毁。

  3. new创建对象直接使用堆空间,而局部不用new定义对象则使用栈空间。

  4. new对象指针用途广泛,比如作为函数返回值、函数参数等。

  5. 频繁调用场合并不适合new,就像new申请和释放内存一样。

new创建对象例子:

CTest*  pTest = new  CTest();delete pTest;

pTest用来接收对象指针。

不用new,直接使用类定义申明:

CTest  mTest;

此种创建方式,使用完后不需要手动释放,该类析构函数会自动执行。

而new申请的对象,则只有调用到delete时再会执行析构函数,如果程序退出而没有执行delete则会造成内存泄漏。

C Test*  pTest = NULL;

但使用普通方式创建的类对象,在创建之初就已经分配了内存空间。

这类指针,如果未经过对象初始化,则不需要delete释放。

5.delete

delete运算符使用的一般格式为

 delete [ ]指针变量

例如要撤销上面用new开辟的空间用:

delete p; 

如果我们用“new char[10];”开辟的字符数组空间,把new返回的指针赋给了指针变量pt,则应该用以下形式的delete运算符撤销该空间:

  delete [] pt;

一般来说delete与new需要配对使用。

6.对于内置类型new/delete/malloc/free可以混用

  1. new/delete是C++中的运算符。malloc / free是函数。

  2. malloc申请内存空间时,手动计算所需大小,new只需类型名,自动计算大小;

  3. malloc申请的内存空间不会初始化,new可以初始化;

  4. malloc的返回值为void*,接收时必须强转,new不需要;

  5. malloc申请内存空间失败时,返回的是NULL,使用时必须判空;new申请内存空间失败时返回异常

7.使用注意事项

动态分配失败,则返回一个空指针(NULL),表示发生了异常,堆资源不足,分配失败。

指针删除与堆空间释放。删除一个指针p(delete p;)实际意思是删除了p所指的目标(变量或对象等),释放了它所占的堆空间,而不是删除p本身(指针p本身并没有撤销,它自己仍然存在,该指针所占内存空间并未释放),释放堆空间后,p成了空指针。

内存泄漏(memory leak)和重复释放。new与delete 是配对使用的, delete只能释放堆空间。如果new返回的指针值丢失,则所分配的堆空间无法回收,称内存泄漏,同一空间重复释放也是危险的,因为该空间可能已另分配,所以必须妥善保存new返回的指针,以保证不发生内存泄漏,也必须保证不会重复释放堆内存空间。

动态分配的变量或对象的生命期。我们也称堆空间为自由空间(free store),但必须记住释放该对象所占堆空间,并只能释放一次,在函数内建立,而在函数外释放,往往会出错。

要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进行访问。

用new和delete可以动态开辟和撤销地址空间。在编程序时,若用完一个变量(一般是暂时存储的数据),下次需要再用,但却又想省去重新初始化的功夫,可以在每次开始使用时开辟一个空间,在用完后撤销它。

以上就是“C++中new与deleted关键字如何使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网其他教程频道。

--结束END--

本文标题: C++中new与deleted关键字如何使用

本文链接: https://www.lsjlt.com/news/329884.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++中new与deleted关键字如何使用
    今天小编给大家分享一下C++中new与deleted关键字如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。可执行程序的...
    99+
    2023-06-30
  • C++深入讲解new与deleted关键字的使用
    目录可执行程序的虚拟地址空间1.new的运算符用法(关键字)2.new的函数用法3.定位new4.new创建对象5.delete6.对于内置类型new/delete/malloc/f...
    99+
    2024-04-02
  • C++中namespace与string关键字如何使用
    这篇文章主要讲解了“C++中namespace与string关键字如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中namespace与string关键字如何使用”吧!names...
    99+
    2023-06-30
  • C#中 New关键字的作用是什么
    C#中 New关键字的作用是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、在C#中,new这个关键字使用频率非常高,主要有3个功能:1)作为运算符用来创建一个对象和调用...
    99+
    2023-06-17
  • C++中如何使用 explicit关键字
    这期内容当中小编将会给大家带来有关C++中如何使用 explicit关键字,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有&...
    99+
    2023-06-17
  • C++ 中如何使用static关键字
    C++ 中如何使用static关键字,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、静态全局变量在全局变量前,加上C++ static关键字,该变量就被定义成...
    99+
    2023-06-17
  • C# 中default关键字如何使用
    本篇文章给大家分享的是有关C# 中default关键字如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C# default关键字可在switch语句或泛型代码中使用。sw...
    99+
    2023-06-17
  • js中new关键字怎么用
    小编给大家分享一下js中new关键字怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!说明new构建函数,在内存中创建一个空对象。this指向刚刚创建的空对象,...
    99+
    2023-06-20
  • JavaScript中的new关键字怎么用
    这篇文章主要介绍了JavaScript中的new关键字怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。new 关键字JavaScript是什么JavaScript是一种直...
    99+
    2023-06-27
  • C++深入浅出讲解内存四区与new关键字的使用
    目录写在前面内存四区程序运行前代码区全局区程序运行后栈区堆区new关键字new的基本语法利用new开辟数组写在前面 从本文开始我就要日常更新C++入门博文啦,从核心编程开始,之前的一...
    99+
    2024-04-02
  • c++中的new是关键字还是操作符
    new是c++中一个关键字,用于动态分配内存。它接收一个类型的参数,返回一个指向分配内存的指针。动态分配的内存需要使用delete关键字显式释放,防止内存泄漏。 C++中的new是关键...
    99+
    2024-04-26
    c++
  • final与static关键字如何在Java中使用
    本篇文章给大家分享的是有关final与static关键字如何在Java中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、final   &n...
    99+
    2023-05-31
    java static final
  • C++中auto关键字的使用
    前提引入 1.类型名,在绝大多数编程时,我们都会引入类型来定义一个我们需要的数据。 类型众多,偶尔我们会遇见一串类型名,使用起来无比复杂。存在拼写错误,含义不明确导致出错的问题。 列...
    99+
    2023-05-15
    C++ auto关键字 C++ auto
  • VB.NET中New关键字的作用是什么
    这篇文章给大家介绍VB.NET中New关键字的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。使用VB.NET New关键字建立一个新的对象和用它属的类来定义是一样的。New关键字可以被用作来建立一个窗体、类模...
    99+
    2023-06-17
  • C++中register关键字怎么使用
    本篇内容介绍了“C++中register关键字怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!register 简介:register...
    99+
    2023-07-05
  • CSS中currentColor关键字如何使用
    这篇文章给大家介绍CSS中currentColor关键字如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、currentColor-真正大隐于市者实际上,之前“SVG图标颜色文...
    99+
    2024-04-02
  • VBS中如何使用Default关键字
    今天就跟大家聊聊有关VBS中如何使用Default关键字,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。其实 MSDN 的 VBScript 文档中关于 Function 和 Sub ...
    99+
    2023-06-08
  • PHP中final关键字如何使用
    今天就跟大家聊聊有关PHP中final关键字如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在PHP中类的继承是使用最多的一个编程特性,我们可以创建一个基类(父类)然后在这其中...
    99+
    2023-06-17
  • ASP.NET中static关键字如何使用
    ASP.NET中static关键字如何使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。静态变量当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对...
    99+
    2023-06-17
  • Java中如何使用final关键字
    Java中如何使用final关键字,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 一.final关键字的基本用法  在Java中,final关键字可以用来修饰类、方法和变量...
    99+
    2023-06-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作