c++ - 有一个单独的 "operator new[]"的目的是什么?

标签 c++ memory-management

看起来 operator newoperator new[] 具有完全相同的签名:

void* operator new( size_t size );
void* operator new[]( size_t size );

并做同样的事情:要么返回一个指向足够大的原始(未以任何方式初始化)内存块的指针,要么抛出异常。

当我使用 newoperator 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/

相关文章:

c++ - 模板类型名称的名称大小写

python - Python 的 id 函数的 Matlab 等价物

C++:glibc 检测到损坏的双链表:0x08f8f148

c++ - 旋转数组 - 错误

c++ - 有没有什么方法可以在 constexpr/consteval 上下文中以 char 数组的形式访问已知大小的任意数据?

iOS 6 UIScrollview : Help My Taco App Keeps Crashing

c++ - 动态分配的字符串数组

c - 操纵指向任意位置的指针

c - 变量可以在设置之前使用

c++ - 字符、指针、强制转换和字符串问题