我有一個簡單的結構,它有固定的大小和包含內置類型。我通過分配內存塊來創建內存池,並將此內存分割爲我的結構體大小的塊。然後它使用placement new來調用特定內存塊上的構造函數以使用默認值初始化一些成員。然後我想通過調用delete []運算符來釋放整個內存塊。我可以安全地跳過顯式的析構函數調用,每個對象使用新的位置初始化嗎?我沒有在該類的其他成員字段的構造函數或構造函數內找到任何資源。我只想釋放整個內存塊。安置新的和破壞者
安置新的和破壞者
回答
你可以跳過調用析構函數,如果它是瑣碎:
如果你可以告訴類型使用std::is_trivially_destructible<Type>::value
表達平凡破壞。如果你使用優化進行編譯,大多數優化器都會爲你解決這個問題,所以編寫一個循環來調用塊中所有對象的瑣碎析構函數不會有性能上的負擔。
不僅可以使用'std :: is_trivially_destructible <>'來確定它是否正常。你真的應該在'static_assert()'中使用它,以確保有人在6個月內沒有向結構中添加「字符串」,或者像這樣愚蠢。 – Frank
如果struct或其任何成員具有顯式定義的析構函數但空體? – user7242858
@ user7242858任何顯式提供的析構函數都被認爲是微不足道的,即使它的主體是空的。 – dasblinkenlight
- 1. 破壞者和地圖
- 2. 破壞者和不接受
- 3. Php破壞者
- 4. BST的破壞者
- 5. 如何破壞通過「安置新」構建的無析者類型
- 6. Eclipse安裝破壞
- 7. Perl安裝破壞
- 8. Boost.Signals2破壞安全
- 9. 單身人士破壞者
- 10. 異常破壞行者
- 11. 包緩存破壞者
- 12. qooxdoo破壞,處置
- 13. 破壞不破壞
- 14. 破壞不破壞
- 15. Java的破壞者庫C#模擬
- 16. 對象崩潰的破壞者
- 17. 2-3-4泄漏的破壞者
- 18. Silverlight安裝遭到破壞
- 19. 安裝GeoDjango - postGIS包破壞
- 20. 新的PHPMailer()破壞會話
- 21. Application.Restart破壞我的設置
- 22. 爲什麼安裝php53-mcrypt會破壞我的作曲者和laravel?
- 23. C++到Java轉換 - 破壞者
- 24. 破壞者:虛擬還是不是?
- 25. 破壞者不保證被稱爲
- 26. 二進制搜索樹破壞者
- 27. Elasticsearch忽略單詞破壞者
- 28. npm非破壞性更新
- 29. 在HTML破壞者按鈕之前放置隱藏內容
- 30. 什麼是java中的破壞性和非破壞性方法?
請顯示您的代碼,而不是解釋它。 –
目前尚不十分清楚你到底在做什麼,但通常情況下,你可以跳過運行析構函數,當且僅當該對象是可破壞的。 –
@BaummitAugen在這種情況下,優化器將無論如何都會這樣做,所以我們不應該真的考慮它 –