如果我初始化一個放置新的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. 就地初始化POD
- 5. PyQt:初始化重置默認值
- 6. C++默認初始化類型
- 7. 初始化,初始化與參數和便利初始化
- 8. 直接初始化與值初始化
- 9. C++ - 初始化與骨料初始化
- 10. Swift對象初始化(類工廠方法,默認初始化,方便初始化)
- 11. 在POD中強制默認的初始化構造函數?
- 12. 與初始化
- 13. 類初始化
- 14. 初始化類
- 15. 安卓:新類變量初始化
- 16. 未初始化的char默認爲@
- 17. main()函數中的默認初始化
- 18. C#6.0的默認初始化
- 19. 陣列的默認初始化
- 20. STL容器的默認初始化
- 21. 重新初始化Java類
- 22. 原始類與包裝類初始化
- 23. java中的初始化初始化
- 24. 可選和默認值需要用默認初始值進行初始化
- 25. 日期默認初始化在JPA
- 26. 加載java.util.logging.config.file用於默認初始化
- 27. 默認嵌套結構初始化
- 28. 初始化OBJ有/無默認值
- 29. 默認結構初始化在C++
- 30. 默認初始化boost ::可選
該文件已過時。在'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