我需要从先前分配的内存块构造一个对象数组。但是,我无法理解::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);
}
}