看起来 operator new
和 operator new[]
具有完全相同的签名:
void* operator new( size_t size );
void* operator new[]( size_t size );
并做同样的事情:要么返回一个指向足够大的原始(未以任何方式初始化)内存块的指针,要么抛出异常。
当我使用 new
和 operator new[]
创建对象时,operator new
也会在内部调用 - 当我创建对象数组时使用 new[]
。上述两个特殊函数在 C++ 内部以完全相同的方式调用,我看不出这两个调用有什么不同的含义。
让两个不同的函数具有完全相同的签名和完全相同的行为的目的是什么?
最佳答案
在 C++ 的设计和演变(第 10.3 节)中,Stroustrup 提到如果对象 X 的 new 运算符本身用于分配对象 X 的数组,那么 X::operator new() 的编写者将不得不处理也有数组分配,这不是 new() 的常见用法并增加了复杂性。因此,不考虑使用 new() 进行数组分配。然后,没有简单的方法为动态数组分配不同的存储区域。解决方案是为数组提供单独的分配器和释放器方法:new[] 和 delete[]。
关于c++ - 有一个单独的 "operator new[]"的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2499895/