首页 > 后端开发 > C++ > C 中的 new 是否将内存初始化为零?

C 中的 new 是否将内存初始化为零?

Linda Hamilton
发布: 2024-12-11 06:53:09
原创
643 人浏览过

Does `new` in C   Initialize Memory to Zero?

运算符 new 将内存初始化为零

在 C 中,new 运算符通常用于动态内存分配。它分配指定大小的内存块并返回指向已分配内存的指针。然而,有一个常见的误解,即 new 不会用零初始化分配的内存。本文阐明了 new 如何初始化内存,解决了明显的差异。

默认和零初始化

当使用 new 创建基本类型的对象时(例如 int , unsigned int),有两种变体:

  • wsk = new unsigned整数; - 默认初始化:不进行初始化,内存保持未初始化状态。
  • wsk = new unsigned int(); - 零初始化:内存设置为零。

同样适用于数组:

  • wsa = new unsigned int[5]; - 默认初始化
  • wsa = new unsigned int[5](); - 零初始化

零初始化说明

虽然 new 通常会初始化具有不确定值的基元,但在使用带有空括号语法的零初始化时会出现异常(new类型();)。这会将内存初始化为零。 C 11 标准支持此行为:

[C++11: 5.3.4/15]: A new-expression that creates an object of type T initializes that object as follows: [...] If the new-initializer is interpreted according to the initialization rules of 8.5 for direct-initialization.
登录后复制

新放置

新放置允许在特定位置分配内存。利用这种零初始化技术,很明显内存确实被设置为零:

//... (memory allocation and initialization code)
wsa[0] = 1;  // Modify the memory location
wsa[1] = 2;  // Modify the memory location
// ... (more modifications)
//...
登录后复制

如果内存包含原始值(1, 2, ...),那么零初始化将有失败的。然而,输出确认分配的内存已设置为零。

因此,虽然 new 通常不会用零初始化原始内存,但使用零初始化 (new type();) 将内存初始化为零。这对于直接内存分配和放置 new 都适用。

以上是C 中的 new 是否将内存初始化为零?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板