如果我初始化一个放置新的POD类,我可以假设内存将被默认初始化(为零)吗? This resource明确指出,如果显式调用零参数默认构造函数,将默认初始化这些字段,但不清楚这是否将使用placement new(传递地址)的默认实现保持true。在这种情况下是否将内存的标准行为归零?POD类初始化与安置新的默认初始化?
3
A
回答
3
从一开始:
5.3.4/15:
- 如果新初始化是形式
()
的,则产品的值初始化(8.5);
8.5/5:
要值初始化类型T的对象是指:
如果T是一个类类型(第9节)与用户声明的构造函数(12.1),那么调用T的默认构造函数(并且如果T没有可访问的默认构造函数,则初始化不合格);如果T是一个没有用户声明构造函数的非联合类类型,那么T的每个非静态数据成员和基类组件都被初始化;
如果T是一个数组类型,那么每个元素都是值初始化的;
否则,对象初始化为零
因为你有一个POD类型的第一颗子弹在这里并不适用,因此,你不能有一个用户声明的构造。您的类型的成员只能是POD类型,如int
,float
等,或者也是POD或POD类型的数组的嵌套结构。因此,最终每个人都会在最后的项目符号上结束:“否则,对象将被初始化为零”。
此初始化发生是因为POD类在您提供的内存中初始化。内存是由操作系统分配的还是您提供的地址无关紧要。
所以,恕我直言,答案是肯定的 - 成员将零初始化。
相关问题
- 1. 默认初始化与默认构建值的初始化初始化
- 2. 默认初始化与数值初始化
- 3. 初始化内置类型初始化
- 4. 默认初始化混乱
- 5. WINHTTP_CURRENT_USER_IE_PROXY_CONFIG默认初始化
- 6. 默认初始化列表
- 7. C++默认初始化
- 8. 初始化PHP类的默认数组
- 9. 初始化POD结构
- 10. 就地初始化POD
- 11. PyQt:初始化重置默认值
- 12. C++默认初始化类型
- 13. 初始化是POD的基类struct
- 14. 初始化,初始化与参数和便利初始化
- 15. 直接初始化与值初始化
- 16. C++ - 初始化与骨料初始化
- 17. Swift对象初始化(类工厂方法,默认初始化,方便初始化)
- 18. 在POD中强制默认的初始化构造函数?
- 19. 初始化类
- 20. 类初始化
- 21. 类初始化
- 22. 初始化类
- 23. 与初始化
- 24. 为什么C++默认初始化不会零初始化非类别成员
- 25. 安卓:新类变量初始化
- 26. main()函数中的默认初始化
- 27. C#6.0的默认初始化
- 28. C++中的默认初始化
- 29. STL容器的默认初始化
- 30. 阵列的默认初始化
该文件已过时。在'03标准修订版本中,`new T();`用于POD,非POD用户声明构造函数的值为初始化,而非默认初始化。你会发现在C++中初始化是一团糟。我希望SO会有桌面支持 – 2009-07-14 15:41:49
呃......我明白你在说什么。我刚刚发现这个错误: http://qc.embarcadero.com/wc/qcmain.aspx?d=51854 虽然我读得越多,它似乎应该是零初始化越多.. – elecengin 2009-07-14 15:49:15