可能有任何理由:
new X[n];
与以下相比,会消耗更多内存:
X* x = reinterpret_cast<X*>(malloc(n * sizeof(X))
for(X* p = x; p != x + n; ++p)
new (p) X();
多个n的多个副本?
我看到了这方面的证据。
答案 0 :(得分:5)
当然:允许Array-new分配更多内存而不仅仅是对象的空间,通常会这样做。当你说delete [] x;
时,实现如何知道要调用多少个析构函数?
见5.3.4 / 10:
new-expression 将请求的空间量作为
std::size_t
类型的第一个参数传递给分配函数。该参数不得小于正在创建的对象的大小; 仅当对象是数组时,它可能大于正在创建的对象的大小。
Itanium ABI是specific about the use of array cookies:
|<-- offset -->|
+--------------+----------+----------+---------+---------+
|(padding) N | a[0] | a[1] | ... | a[N-1] |
+--------------+----------+----------+---------+---------+
^ ^
| +---- T * a = new T[N]
|
+---- return value of `operator new(sizeof(T) * N + offset)`