如果我使用新的放置来初始化 POD 类,我可以假设内存将默认初始化(为零)吗?这个资源 http://www.fnal.gov/docs/working-groups/fpcltf/Pkg/ISOcxx/doc/POD.html明确指出,如果您显式调用零参数默认构造函数,则字段将被默认初始化,但不清楚使用放置 new 的默认实现(传递地址)这是否成立。在这种情况下,内存归零是标准行为吗?
从一开始就:
5.3.4/15:
- If the 新的初始化器是这样的形式
()
,则该项被值初始化(8.5);
8.5/5:
To 值初始化T 类型的对象意味着:
第一个项目符号在这里不适用,因为您有 POD 类型,因此您不能拥有用户声明的构造函数。您的类型的成员只能是 POD 类型,例如int
, float
等等或者也是一个 POD 或 POD 类型数组的嵌套结构。因此最终他们每个人都以最后一个项目符号结束:“否则,该对象将被零初始化”。
发生此初始化是因为 POD 类是在您提供的内存中初始化的。内存是由操作系统分配的还是您提供的地址并不重要。
所以,恕我直言,答案是肯定的 - 成员将被零初始化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)