gpt4 book ai didi

c++ -::operator new[]() 与::operator new() 有何不同?

转载 作者:太空狗 更新时间:2023-10-29 20:30:09 24 4
gpt4 key购买 nike

我需要从之前分配的内存块构造一个对象数组。但是,在分配该 block 时,从用户的角度来看,我无法理解 ::operator new[]()::operator new() 有何不同,因为两者都需要 block 的大小。在下面的示例中,使用其中任何一个似乎都具有相同的效果。我错过了什么吗?

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);
}
}

最佳答案

您滥用了

使用 new [] 的要点是它为分配的数组中的每个元素调用构造函数。 delete[] 对析构函数执行相同的操作。

您正在使用放置 new 并手动调用构造函数和析构函数,错过了重点。

关于c++ -::operator new[]() 与::operator new() 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7814723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com