我需要从先前分配的内存块构造一个对象数组。然而,我不明白::operator new[]()
与::operator new()
在分配该块时从用户的角度不同,因为两者都需要该块的大小。在下面的例子中,使用任何一个似乎都有相同的效果。我错过了什么吗?:: operator new []()与:: operator new()不同的方式是什么?
class J {
};
int main() {
const int size = 5;
{
J* a = static_cast<J*> (::operator new[](sizeof (J) * size));
for (int i = 0; i < size; i++)
new (&a[i]) J();
for (int i = 0; i < size; i++)
a[i].~J();
::operator delete[] (a);
}
{
J* a = static_cast<J*> (::operator new(sizeof (J) * size));
for (int i = 0; i < size; i++)
new (&a[i]) J();
for (int i = 0; i < size; i++)
a[i].~J();
::operator delete (a);
}
}
[有什么单独的“operator new \ [\]”的目的?](http://stackoverflow.com/questions/2499895/whats-the-purpose-of-having-a-separate -operator-new) –
我不认为它是一样的。那里的OP知道有什么不同,并问为什么。这里OP在询问有什么不同。对于精通C++的人来说,容易被弄糊涂,但这绝对不是同一个问题。 – littleadv
@littleadv:就像我看到的那样(仍然在考虑你的评论之后),这绝对是完全一样的问题。 –