我有一个简单的结构,它有固定的大小和包含内置类型。我通过分配内存块来创建内存池,并将此内存分割为我的结构体大小的块。然后它使用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在这种情况下,优化器将无论如何都会这样做,所以我们不应该真的考虑它 –