在C ++中重载operator new和operator new []有什么区别?

时间:2015-10-07 03:12:14

标签: c++ operator-overloading

operator newoperator new[]具有相同的函数原型:void * (size_t size)。当我要超负荷时,我应该注意什么?

如果我只重载operator new

,那可以

重载operator deleteoperator delete[]之间有什么区别?

2 个答案:

答案 0 :(得分:6)

operator new用于创建单个对象,例如:

my_class* p = new my_class;

operator new[]用于创建对象的数组,例如:

my_class* p = new my_class[10];
  

如果我只重载operator new吗?可以吗?

这取决于您是否需要对阵列版本(operator new[])进行特殊处理。默认情况下,operator new[]会调用operator new

基本上,如果你需要重载operator new,那么过载operator new[]也会更好,因为如果你想实现自己的内存管理,那么这是一个好主意。让他们保持一致。并且不要忘记nothrow和placement版本(仅作为成员函数,全局版本无法取代)。

operator deleteoperator delete[]也是如此。

答案 1 :(得分:0)

new创建一个实例,而new []创建一个数组。

与存储数组大小的new相比,

new []几乎没有内存开销。

您不能将非默认构造函数与new []。

一起使用

new必须与删除一起使用。

new []必须与delete []一起使用。

另一个差异:

new []是一个操作符,用于分配和初始化对象数组并返回指向第一个元素的指针。

这与具有相同行为但对于一个分配而不是数组

的new运算符不同