C++ 放置新的和析构函数

C++ 放置新的和析构函数,c++,destructor,placement-new,C++,Destructor,Placement New,我有一个简单的结构,它有固定的大小并包含内置类型。我通过分配内存块来创建内存池,并将该内存拆分为结构大小的块。然后它使用placement new调用特定内存块上的构造函数,用默认值初始化一些成员。然后我想通过调用delete[]操作符来释放整个内存块。我是否可以安全地跳过使用新位置初始化的每个对象的显式析构函数调用?我没有在构造函数或该类的其他成员字段的构造函数中找到任何资源。我只想释放整个内存块。如果调用析构函数很简单,您可以跳过它: 您可以使用表达式来判断该类型是否是可破坏的。如果在启用

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

如果调用析构函数很简单,您可以跳过它:


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

请显示代码,而不是解释代码。不太清楚您到底在做什么,但一般来说,当且仅当对象是可平凡破坏的时,您可以跳过运行析构函数。@BaummitAugen,在这种情况下,优化器无论如何都会这样做,因此人们不应该真正考虑它。不仅可以使用
std::is_littley_destructible
来确定它是否正常。你真的应该在
static_assert()
中使用它,以确保有人不会在6个月内将
字符串
添加到结构中,或者像这样愚蠢的事情。如果结构或其任何成员已经显式定义了析构函数,但其主体是空的呢?@user7242858任何显式提供的析构函数都不被认为是微不足道的,即使它的身体是空的。