我有一個簡單的結構,它有固定的大小和包含內置類型。我通過分配內存塊來創建內存池,並將此內存分割爲我的結構體大小的塊。然後它使用placement new來調用特定內存塊上的構造函數以使用默認值初始化一些成員。然後我想通過調用delete []運算符來釋放整個內存塊。我可以安全地跳過顯式的析構函數調用,每個對象使用新的位置初始化嗎?我沒有在該類的其他成員字段的構造函數或構造函數內找到任何資源。我只想釋放整個內存塊。安置新的和破壞者
安置新的和破壞者
回答
你可以跳過調用析構函數,如果它是瑣碎:
如果你可以告訴類型使用std::is_trivially_destructible<Type>::value
表達平凡破壞。如果你使用優化進行編譯,大多數優化器都會爲你解決這個問題,所以編寫一個循環來調用塊中所有對象的瑣碎析構函數不會有性能上的負擔。
不僅可以使用'std :: is_trivially_destructible <>'來確定它是否正常。你真的應該在'static_assert()'中使用它,以確保有人在6個月內沒有向結構中添加「字符串」,或者像這樣愚蠢。 – Frank
如果struct或其任何成員具有顯式定義的析構函數但空體? – user7242858
@ user7242858任何顯式提供的析構函數都被認爲是微不足道的,即使它的主體是空的。 – dasblinkenlight
- 1. Php破壞者
- 2. 如何破壞通過「安置新」構建的無析者類型
- 3. Eclipse安裝破壞
- 4. Boost.Signals2破壞安全
- 5. Perl安裝破壞
- 6. 單身人士破壞者
- 7. 異常破壞行者
- 8. 包緩存破壞者
- 9. qooxdoo破壞,處置
- 10. 對象崩潰的破壞者
- 11. 新的PHPMailer()破壞會話
- 12. 二進制搜索樹破壞者
- 13. 在HTML破壞者按鈕之前放置隱藏內容
- 14. 什麼是java中的破壞性和非破壞性方法?
- 15. HHVM/FastCGI/Proxy安裝破壞我的Apache?
- 16. Silverlight 4.1.10111安全更新破壞了我的電腦
- 17. 破壞的SWFUpload
- 18. 算法,破壞和copy_construct
- 19. C++ - 製造和破壞
- 20. PHP會話和cookie破壞
- 21. Magento2安裝破壞會話並註銷
- 22. 導軌3.1線程安全破壞
- 23. tfs2017上的SVN更新破壞
- 24. AJAX刷新網站的破壞版式
- 25. 開始由AdMob破壞的新活動?
- 26. Django開發環境破壞以下Mac OS 10.7重新安裝
- 27. 破壞的HTML表
- 28. Xcode6破壞我的代碼。有沒有修復或者我應該重新安裝嗎?
- 29. 數據破壞
- 30. 破壞WebWorkers
請顯示您的代碼,而不是解釋它。 –
目前尚不十分清楚你到底在做什麼,但通常情況下,你可以跳過運行析構函數,當且僅當該對象是可破壞的。 –
@BaummitAugen在這種情況下,優化器將無論如何都會這樣做,所以我們不應該真的考慮它 –