经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
C/C++编程笔记:C ++中用于动态内存的new和delete运算符
来源:cnblogs  作者:安生丶  时间:2021/2/18 15:47:40  对本文有异议

C / C ++中的动态内存分配是指程序员手动执行内存分配。动态分配的内存在堆上分配,非静态和局部变量在堆栈上分配内存。

有什么应用?

动态分配内存的一种用途是分配可变大小的内存,而可变长度数组除外,这是编译器分配的内存无法实现的。

最重要的用途是为程序员提供了灵活性。无论何时需要和不再需要,我们都可以自由分配和取消分配内存。在许多情况下,这种灵活性会有所帮助。此类情况的示例是“链表”,“树”等。

它与分配给普通变量的内存有何不同?

对于“ int a”,“ char str [10]”等常规变量,将自动分配和释放内存。对于动态分配的内存,例如“ int * p = new int [10]”,程序员有责任在不再需要时释放内存。如果程序员不释放内存,则会导致内存泄漏(在程序终止之前不会释放内存)。

如何在C ++中分配/取消分配内存?

C使用malloc()和calloc()函数在运行时动态分配内存,并使用free()函数释放动态分配的内存。C ++支持这些功能,并且还有两个newDelete运算符,它们以更好和更轻松的方式执行分配和释放内存的任务。

本文全部涉及new和delete运算符。

new 运算符

新的运算符表示在免费存储上分配内存的请求。如果有足够的内存可用,则new运算符将初始化该内存,并将新分配和初始化的内存的地址返回给指针变量。

使用new运算符的语法:要分配任何数据类型的内存,语法为:

pointer-variable =new data-type;

这里,pointer-variable是data-type类型的指针。数据类型可以是任何内置数据类型,包括数组,也可以是任何用户定义的数据类型,包括结构和类。

int *p = NULL;

p = new int; 

初始化内存:我们还可以使用new运算符来初始化内存:

指针变量 =newdata-type(value);

int *p = new int(25);

float *q = new float(75.25);

分配内存块: new运算符还用于分配data-type类型的内存块(数组)。

指针变量 =new data-type[size];

其中size(一个变量)指定数组中元素的数量。

int *p = new int[10]

为int类型的10个整数连续动态分配内存,并将指针返回到序列的第一个元素,该元素分配给p(一个指针)。p [0]表示第一个元素,p [1]表示第二个元素,依此类推。

 

 

普通数组声明与使用new

声明普通数组与使用new分配内存块之间有区别。最重要的区别是,常规数组由编译器释放(如果数组是本地数组,则在函数返回或完成时释放)。但是,动态分配的数组始终保留在那里,直到程序员将其释放或程序终止为止。

如果运行时没有足够的内存怎么办?

如果堆中没有足够的内存来分配,则新请求将抛出std :: bad_alloc类型的异常,以指示失败,除非new操作符使用了“ nothrow”,在这种情况下它将返回NULL指针。因此,最好在使用new程序之前检查new产生的指针变量。

 

 

删除运算符

由于取消分配动态分配的内存是程序员的责任,因此使用C ++语言为程序员提供了delete运算符。

句法:

//释放指针变量指向的内存

delete 指针变量; 

在这里,指针变量是指向由new创建的数据对象的指针。

例子:

delete p;  delete q;

要释放指针变量指向的动态分配数组,请使用以下形式的delete

delete[] p;

本期的知识分享就到这里了,希望对大家有帮助~

另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~

C语言C++编程学习交流圈子,QQ群1090842465点击进入】微信公众号:C语言编程学习基地

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习书籍分享:

编程学习视频分享:

原文链接:http://www.cnblogs.com/258a/p/14364534.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号