放置新的和析构函数

Placement new and destructor

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

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

A trivial destructor is a destructor that performs no action. Objects with trivial destructors don't require a delete-expression and may be disposed of by simply deallocating their storage.

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