放置新的和析构函数

use*_*858 3 c++ destructor placement-new

我有简单的结构,具有固定的大小,并包含内置类型.我通过分配内存块来创建内存池,并将此内存拆分为结构大小的块.然后,它使用放置新调用特定的内存块上构造一些成员使用默认值初始化.然后我想通过调用delete []运算符来释放整个内存块.我可以安全地跳过使用placement new初始化的每个对象的显式析构函数调用吗?我没有找到内部构造函数或内部的类的其他成员字段的构造函数的任何资源.我想要释放整个内存块.

das*_*ght 5

如果它是微不足道的,你可以跳过对析构函数的调用:

一个简单的析构函数是一个不执行任何操作的析构函数.具有普通析构函数的对象不需要delete-expression,并且可以通过简单地解除分配它们的存储来处理.

您可以使用std::is_trivially_destructible<Type>::value表达式判断类型是否可以轻易破坏.如果你使用优化进行编译,大多数优化器都会为你解决这个问题,因此编写一个为块中所有对象调用普通析构函数的循环不会有性能损失.

  • 不仅可以使用`std :: is_trivially_destructible &lt;&gt;`来确定是否还可以。您确实应该在“ static_assert()”中使用它,以确保有人在6个月内不会向结构中添加“字符串”,或者类似的愚蠢行为。 (2认同)