《C和C++代码精粹》——1.15 new和delete

简介:

本节书摘来自异步社区出版社《C和C++代码精粹》一书中的第1章,第1.15节,作者: 【美】Chuck Allison,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.15 new和delete

C和C++代码精粹
在C语言中为了用堆栈,需要计算出所要创建的对象的大小:

struct Foo*fp =malloc(sizeof(struct Foo) );

在C++中,运算符new用于计算出对象的大小:

Foo*fp=new Foo;

在C语言中分配数组,需调用不同的函数。

struct Foo*fpa= calloc(n,sizeof(struct Foo));

在C++中,new运算符会知道数组的大小:

Foo*fpa=new Foo[n];

此外,运算符 new 在返回指针之前,自动调用适当的构造函数来初始化对象。例如,在堆栈中创建复数时,编译器会自动将它们初始化,如下:

complex *cp1= new complex;     // -> (0,0)
complex *cp2= new complex(1);   // -> (1,0)
complex *cp3= new complex(2,3);  // -> (2,3)

可以用delete运算符的两种形式之一,把动态内存返还给堆栈,对于单独的对象可以这样做:

delete fp;
delete cp1;

但是,释放一个数组需要不同的句法:

delete [ ] fpa; // 释放数组句法
像C++的一些其他特性一样,new 和 delete 提高了程序的类型安全性。用户不仅仅是申请一些内存,还有带有适当的类型检查和初始化的对象。如果想了解更多的关于内存管理的内容,请参见第20章。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
6月前
|
C++ Windows
应用程序无法正常启动(0xc0000005)?C++报错0xC0000005如何解决?使命召唤17频频出现闪退,错误代码0xC0000005(0x0)
简介: 本文介绍了Windows应用程序出现错误代码0xc0000005的解决方法,该错误多由C++运行库配置不一致或内存访问越界引起。提供包括统一运行库配置、调试排查及安装Visual C++运行库等解决方案,并附有修复工具下载链接。
1723 1
|
8月前
|
安全 C语言 C++
比较C++的内存分配与管理方式new/delete与C语言中的malloc/realloc/calloc/free。
在实用性方面,C++的内存管理方式提供了面向对象的特性,它是处理构造和析构、需要类型安全和异常处理的首选方案。而C语言的内存管理函数适用于简单的内存分配,例如分配原始内存块或复杂性较低的数据结构,没有构造和析构的要求。当从C迁移到C++,或在C++中使用C代码时,了解两种内存管理方式的差异非常重要。
278 26
|
存储 安全 C语言
C++ String揭秘:写高效代码的关键
在C++编程中,字符串操作是不可避免的一部分。从简单的字符串拼接到复杂的文本处理,C++的string类为开发者提供了一种更高效、灵活且安全的方式来管理和操作字符串。本文将从基础操作入手,逐步揭开C++ string类的奥秘,帮助你深入理解其内部机制,并学会如何在实际开发中充分发挥其性能和优势。
【C++】深入解析C/C++内存管理:new与delete的使用及原理(二)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
255 4
|
编译器 C++ 开发者
【C++】深入解析C/C++内存管理:new与delete的使用及原理(三)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
306 3
|
存储 C语言 C++
【C++】深入解析C/C++内存管理:new与delete的使用及原理(一)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
322 3
|
8月前
|
API 数据安全/隐私保护 C++
永久修改机器码工具, exe一机一码破解工具,软件机器码一键修改工具【c++代码】
程序实现了完整的机器码修改功能,包含进程查找、内存扫描、模式匹配和修改操作。代码使用
|
9月前
|
C++
爱心代码 C++
这段C++代码使用EasyX图形库生成动态爱心图案。程序通过数学公式绘制爱心形状,并以帧动画形式呈现渐变效果。运行时需安装EasyX库,教程链接:http://【EasyX图形库的安装和使用】https://www.bilibili.com/video/BV1Xv4y1p7z1。代码中定义了屏幕尺寸、颜色数组等参数,利用随机数与数学函数生成动态点位,模拟爱心扩散与收缩动画,最终实现流畅的视觉效果。
1107 0
|
算法 安全 C++
提高C/C++代码的可读性
提高C/C++代码的可读性
335 4
|
程序员 C语言 C++
C++入门5——C/C++动态内存管理(new与delete)
C++入门5——C/C++动态内存管理(new与delete)
307 2