首页 > 解决方案 > 为什么 new[] 表达式会调用析构函数?

问题描述

来自 C++17 标准(此处草稿),[expr.new]:

如果new 表达式创建类类型的对象或对象数组,则对分配函数、解除分配函数和构造函数进行访问和歧义控制。如果new 表达式创建了一个类类型的对象数组,则可能会调用析构函数。

为什么会new[]调用析构函数?毕竟是新的。不是删除。

标签: c++c++17new-operator

解决方案


如果缓冲区中任何对象的构造引发异常,则必须破坏先前构造的对象。这需要一个可用的析构函数。


推荐阅读