运算符 new 将内存初始化为零
在 C 中,new 运算符通常用于动态内存分配。它分配指定大小的内存块并返回指向已分配内存的指针。然而,有一个常见的误解,即 new 不会用零初始化分配的内存。本文阐明了 new 如何初始化内存,解决了明显的差异。
默认和零初始化
当使用 new 创建基本类型的对象时(例如 int , unsigned int),有两种变体:
同样适用于数组:
零初始化说明
虽然 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中文网其他相关文章!