运算符 new 将内存初始化为零
尽管人们普遍误解 new 运算符不会用零初始化内存,但它确实可以实现这一点特定条件下的任务。
在 C 中,new 运算符执行零的情况主要有两种初始化:
括号初始化:
当 new 后面跟着括号和一个空的初始化列表时,例如 wsk = new unsigned int() ;,它显式调用该类型的默认构造函数。对于像 unsigned int 这样的基本类型,默认构造函数会将内存初始化为零。
带括号的数组初始化:
与之前的场景类似,在数组声明中使用括号和空的初始化列表,例如 wsa = new unsigned int[5]();,初始化每个数组元素为零。
在提供的示例代码中,以下几行展示了零初始化:
wsk2 = new unsigned int(5);
这将 wsk2 初始化为值 5。
wsk2 = new unsigned int;
这会将 wsk2 初始化为零,因为它使用括号语法而没有初始化列表。此行为适用于标量和数组。
在示例的第二部分中,输出确认了零初始化:
wsk2: 0x928e008 5 wsk2: 0x928e008 0
第一行显示 wsk2 指向地址 0x928e008并且包含值 5。删除 wsk2 并使用 new unsigned int; 创建另一个后,第二行显示它现在指向相同的地址(0x928e008) 但包含零。
以上是C 中的 new 运算符总是将内存初始化为零吗?的详细内容。更多信息请关注PHP中文网其他相关文章!