From the C++17 standard (draft [here](http://open-std.org/JTC1/SC22/WG21/docs/papers/2017/n4659.pdf)), [expr.new]:

> 
> If the *new-expression* creates an object or an array of objects of class type, access and ambiguity control are done for the allocation function, the deallocation function, and the constructor. **If the *new-expression* creates an array of objects of class type, the destructor is potentially invoked.**
> 
> 
> 

Why would `new[]` invoke a destructor? It's *new,* after all. It isn't *delete.*